Pandas教程-下载、读取、查询、新增列、统计函数

用处:数据分析、数据处理、数据可视化

和其他类库一起使用
numpy:用于数学计算
scikit-learn:用于机器学习

目录

常用语法

多行转一行语法

下载安装Pandas

一、Pandas怎样读取数据

1、读取纯文本

1.1 读取csv

1.2 读取txt,自己指定分隔符、列名

2、读取EXCEL

3、读取MySQL数据库

二、Pandas的2种数据结构

1、Series

1.1 仅有的数据列产生最简单的Series

1.2具有索引的Series

 1.3使用Python字典创建Series

1.4根据标签索引查询数据

2、DataFrame

2.1根据多个字典序列创建dateframe

2.1.1查看dateframe每一列的数据类型df.dtypes

2.1.2查看列索引df.columns

2.1.3查看行索引df.index

2.1.4查询一行/一列

查询一列

查询一行

2.1.5查询多行/多列

查询多列

查询多行

四、Pandas查询数据的5种方法

0、读取数据到dataframe

替换

查看列的类型

1、单个label值查询数据

​编辑

2、使用值列表批量查询

3、使用数值区间进行范围查询

4、※使用条件表达式查询

4.1.简单条件查询,最低温度低于-10度的列表

​编辑

4.2.复杂条件查询:查一下我心中的完美天气

5、※?调用函数查询

5.1.直接写lambda表达式

​编辑5.2.编写自己的函数传入df 

五、Pandas新增数据列的4种方法

0、读取csv数据到dataframe

1、直接赋值

2、df.apply方法

3、df.assign方法

4、按条件选择分组分别赋值

六、Pandas数据统计函数

0、读取csv数据

1、汇总类统计

查看单个Series的数据

2、唯一去重和按值计数

2.1唯一去重(列举枚举值)——df["XXX"].unique()

2.2按值计数(列举枚举值并计数,按降序排)——df["XXX"].value_counts()

​编辑

3、相关系数和协方差

3.1 df.cov()协方差矩阵

3.2 df.corr()相关系数矩阵


常用语法

#返回列数
df.shape[1]
#返回行数
df.shape[0]   或者:len(df)

多行转一行语法

https://blog.csdn.net/qq_41780234/article/details/125324060?spm=1001.2014.3001.5502

下载安装Pandas


下载使用Python类库集成安装包:anaconda
https://www.anaconda.com

pip install pandas

安装备用命令(没有连上python官方镜像源导致的):

pip install pandas -i https://mirrors.aliyun.com/pypi/simple/

一、Pandas怎样读取数据


读取类型:

数据类型

Pandas读取方法

csv\tsv\txt

pd.read_csv

excel

pd.read_excel

mysql

pd.read_sql

1、读取纯文本


1.1 读取csv

fpath = "./datas/ml-latest-small/ratings.csv"
#使用pd.read_csv读取数据
ratings = pd.read_csv(fpath)

 
#查看前几行数据
ratings.head()

#查看数据的形状,返回(行数、列数),df.shape[1]返回列数,df.shape[0]返回行数
ratings.shape

#共查看列名列表
ratings.columns

#查看索引列
ratings.index

1.2 读取txt,自己指定分隔符、列名

fpath ="./datas/crazyant/access_pvuv.txt"
pvuv = pd.read_csv(
    fpath,
    sep="\t", #分隔符
    header=None,
    names=['pdate','pv','uv']
)

print(pvuv)


2、读取EXCEL


 

fpath = './access_pvuv.xlsx'
pvuv = pd.read_excel(fpath)


3、读取MySQL数据库

import pymysql
conn=pymysql.connect(
    host='127.0.0.1',
    user='root',
    password='12345678',
    database='test',
    charset='utf8'
)

mysql_page=pd.read_sql("select * from crazyant_pvuv",con=conn)

print(mysql_page)

二、Pandas的2种数据结构

  • DataFrame:二维数据,整个表格多行多列
  • Series: 一维数据,一行或一列

1、Series


series是一种类似与一维数组的对象,由一组数据以及一组与之相关的数据标签(索引)组成


1.1 仅有的数据列产生最简单的Series

s1 = pd.Series([1,'a',5,7])



左侧索引,右侧列表,结果:
 


1.2具有索引的Series

s2 = pd.Series([10,'aaa',150,70], index=['年龄','名字','身高','体重'])


左侧索引,右侧列表,结果:

 1.3使用Python字典创建Series

dict1 = {"年龄": 10, "性别": "女", "身高": 135}
s3 = pd.Series(dict1)

左侧索引(字典的key),右侧列表(字典的value),结果:

 

1.4根据标签索引查询数据


类似Python的字典

dict1 = {"年龄": 10, "性别": "女", "身高": 135}
s3 = pd.Series(dict1)
print(s3)

#访问索引对应的值
print(s3['年龄'])

print(type(s3['年龄']))


2、DataFrame


DataFrame是一个表格型的数据结构
每列可以是不同的值类型(数值、字符串、布尔值等)
有行索引index,也有列索引columns
可以被看做由Series组成的字典
创建dataframe最常用的方法,见02节读取纯文本文件、excel、mysql数据库

2.1根据多个字典序列创建dateframe

# DataFrame
data = {'name': ['Anna', 'Bob', 'Cindy'],
        'age': [23, 24, 25],
        'tel': ['111', '222', '333'],
        }
df = pd.DataFrame(data)

结果:


2.1.1查看dateframe每一列的数据类型df.dtypes
 
df.dtypes


2.1.2查看列索引df.columns

 

df.columns


Index(['name', 'age', 'tel'], dtype='object')


2.1.3查看行索引df.index
df.index


RangeIndex(start=0, stop=3, step=1)


2.1.4查询一行/一列


返回的是Series

查询一列
# 查询"name"列
df['name']

查询一行
# 查询第2行
df.loc[1]
2.1.5查询多行/多列


返回的是一个DataFrame


查询多列
# name列和age列
df[['name', 'age']]
查询多行
# 第1-3行
df.loc[0:2]


四、Pandas查询数据的5种方法


1.df.Ioc方法,根据行、列的标签值查询
2.df.iloc方法,根据行、列的数字位置查询
3.df.where方法
4.df.query方法
.Ioc既能查询,又能覆盖写入,强烈推荐!

0、读取数据到dataframe


df = pd.read_csv(fpath)


读取前几行:

df.head()


设定索引为ymd,方便按照日期筛选

df.set_index('ymd', inplace=True)


替换


替换温度的后缀

df.loc[:,"bwendu"] = df["bwendu"].str.replace("℃", "").astype('int32')


查看列的类型

df.dtypes


1、单个label值查询数据


注意:这里'2018-01-03'是行索引
查询2018年1月3日,最高温度的值:

# 得到单个值
df.loc['2018-01-03', 'bwendu']


查询2018年1月3日,最高温度的值和最低温度值:

# 得到一个Series
df.loc['2018-01-03',['bwendu', 'ywendu']]

 


2、使用值列表批量查询

查询2018年1月3日、2018年1月4日、2018年1月5日的最高温度:

#得到Series
df.loc[['2018-01-03', '2018-01-04', '2018-01-05'], 'bwendu']


查询2018年1月3日、2018年1月4日、2018年1月5日的最高温度和最低温度:

#得到DataFrame
df.loc[['2018-01-03', '2018-01-04', '2018-01-05'], ['bwendu', 'ywendu']]

 

 

3、使用数值区间进行范围查询


注意:包含起、始

查询2018年1月3日到2018年1月5日的最高温度:

#行index按区间
#得到Series
df.loc['2018-01-03': '2018-01-05', 'bwendu']

 

查询2018年1月3日 从'bwendu'到'fengxaing'列:

#列index按区间
#得到Series
df.loc['2018-01-03', 'bwendu': 'fengxiang']

 

#行index和列index都按区间查询

#得到DateFrame

df.loc['2018-01-03': '2018-01-05', 'bwendu': 'fengxiang']


4、※使用条件表达式查询


bool列表的长度得等于行数或者列数

4.1.简单条件查询,最低温度低于-10度的列表

df.loc[df["ywendu"]<10, :]

#boolean条件
df["bwendu"]<-10  # loc条件查询只会返回True的值

 

4.2.复杂条件查询:查一下我心中的完美天气


查询最高温度小于30并且最低温度大于15,并且是晴天,并且天气为优的数据
注意:组合条件用&合并,每个条件都要带()括号

#查询最高温度小于30并且最低温度大于15,并且是晴天,并且天气为优的数据
df.loc[(df["bwendu"]<=30)&(df["ywendu"]>=15)&(df["tianqi"]=='晴')&(df["aqiLevel"]==1), :]

 

5、※?调用函数查询


5.1.直接写lambda表达式

#直接写lambda表达式
df.loc[lambda df:(df["bwendy"]<=30)&(df["ywendu"]>=15), :]


5.2.编写自己的函数传入df 

#编写自己的函数,查询9月份空气质量好的数据
def query_my_data(df):
    #对于每一行的Series,我们调用他的index,并把他转换成str, 
    #再在这个str上调用startwith函数
    return df.index.str.startswith("2018-09")&df["aqiLevel"]==1
    
df.loc[query_my_data, :]



注意:函数式编程的本质:函数自身可以像变量一样传递


五、Pandas新增数据列的4种方法


1 直接赋值
2 df.apply方法
3 df.assign方法
4 按条件选择分组分别赋值

0、读取csv数据到dataframe

import pandas as pd
fpath = 'xxx'
df = pd.read_csv(fpath)


1、直接赋值


实例:清理温度列,变成int类型
 

df.loc[:,"bwendu"] = df["bwendu"].str.replace("℃", "").astype('int32')
df.loc[:,"ywendu"] = df["ywendu"].str.replace("℃", "").astype('int32')

实例:计算温差
两个Series相减,把值赋值给新的列"wencha"

# 注意:df["bwendu"]其实是一个Series,后面的减法返回的也是Series
df.loc[:, "wencha"] = df["bwendu"]-df["ywendu"]

df.head()

2、df.apply方法

Apply a function along an axis of the DataFrame.
Objects passed to the function are Series objects whose index is either the DataFrame's index
(axis=0)or the DataFrame's columns (axis=1).
实例:添加一列温度类型:
最高温度大于30  高温
最低温度小于-10  低温
否则  常温

def get_wendu_type(x):
    if x["bwendu"] > 30:
        return '高温'
    if x["ywendu"] < -10:
        return '低温'
    return '常温'

#注意:需要设置axis==1,这是series的index是columns
df.loc[:, "wendu_type"] = df.apply(get_wendu_type, axis=1)


axis=1的含义:传递的这个函数是Series ,key是列名

对某一个字段分组计数——df["columns"].value_counts()
查看温度类型的计数
 

df["wendu_type"].value_counts()


3、df.assign方法

 

Assign new columns to a DataFrame.
Returns a new object with all original columns in addition to new ones.

直接把某个列的series的columns传给函数,指定多个键值对的形式:key是新增的列,values是函数

实例:将温度从摄氏度变成华氏度

#可以同时添加多个列
df.assign(
    #摄氏度转华氏度
    ywendu_h = lambda x : x["ywendu"]*9/5+32,
    bwendu_h = lambda x : x["bwendu"]*9/5+32
)

4、按条件选择分组分别赋值


按条件先选择数据,然后对这部分数据赋值新列
实例:高低温差大于10度,则认为温差大

#先创建空列
df["wencha_type"] = ''
df.loc[df["bwendu"]-df["ywendu"]>10,"wencha_type"] = "温差大"
df.loc[df["bwendu"]-df["ywendu"]<=10,"wencha_type"] = "温差正常"
df["wencha_type"].value_counts()

 

六、Pandas数据统计函数


0、读取csv数据

import pandas as pd
fpath = 'xxx'
df = pd.read_csv(fpath)
df.head(3)
#替换温度后缀
df.loc[:,"bwendu"] = df["bwendu"].str.replace("℃", "").astype('int32')
df.loc[:,"ywendu"] = df["ywendu"].str.replace("℃", "").astype('int32')

1、汇总类统计


提取所有数字列统计结果:
count计数 
mean平均值 
std标准差 
min最小值 
25% 
50% 
75% 
max最大值

df.describe()


查看单个Series的数据

#平均值
df["bwendu"].mean()
#最大值
df["bwendu"].max()
#最小值
df["bwendu"].min()

2、唯一去重和按值计数


2.1唯一去重(列举枚举值)——df["XXX"].unique()


一般不用于数据列,而是枚举、分类列
实例:列举该列"fengxiang"所有的枚举值

df["fengxiang"].unique()

 

2.2按值计数(列举枚举值并计数,按降序排)——df["XXX"].value_counts()


按值分组计数,并降序排列
实例:查询每种风向的次数
 

df["fengxiang"].value_counts()

 

3、相关系数和协方差


用途(超级厉害):
1.两只股票,是不是同涨同跌?程度多大?正相关还是负相关?
2.产品销量的波动,跟哪些因素正相关、负相关,程度有多大?
来自知乎,对于两个变量X、Y:
1.协方差:衡量同向反向程度,如果协方差为正,说明X,Y同向变化,协方差越大说明同向程度
越高;如果协方差为负,说明X,Y反向运动,协方差越小说明反向程度越高。
2.相关系数:衡量相似度程度,当他们的相关系数为1时,说明两个变量变化时的正向相似度最
大,当相关系数为-1时,说明两个变量变化的反向相似度最大

3.1 df.cov()协方差矩阵

df.cov()

 

3.2 df.corr()相关系数矩阵

df.corr()

 

#单独查看空气质量和最高温度的相关系数
df["aqi"].corr(df["bwendu"])
#单独查看空气质量和最低温度的相关系数
df["aqi"].corr(df["ywendu"])
#查看空气质量和温差的相关系数
df["aqi"].corr(df["bwendu"]-df["ywendu"])


这是特征工程对于机器学习重要性的一个例子!!!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 您可以使用 Pandas 的 `dt` 属性向量化地操作时间序数据,从而提取某数据的星期信息。具体实现如下: ```python import pandas as pd # 读取数据 df = pd.read_csv('filename.csv') # 将某一数据转换为日期格式 df['date_column'] = pd.to_datetime(df['date_column']) # 提取星期信息,星期一对应0,星期日对应6 df['weekday_column'] = df['date_column'].dt.weekday ``` 其中,`date_column` 是您要提取星期信息的名,`weekday_column` 是存储星期信息的新名。读取完成后,您可以使用 `df.head()` 查看前几行数据,以确保日期转换和星期提取操作已正确执行。 ### 回答2: 要提取pandas数据框中某一的星期,我们可以使用pandas中的datetime模块。首先,我们需要确保该的数据类型是日期时间类型。然后,我们可以利用datetime模块中的weekday()函数来获取该日期对应的星期。 假设我们有一个名为df的数据框,其中有一名为"date",包含日期数据。我们可以按照以下步骤提取该的星期信息: 首先,我们需要将"date"转换为日期时间类型,如果该的数据类型不是日期时间类型,我们可以使用pandas的to_datetime()函数进行转换: df['date'] = pd.to_datetime(df['date']) 这将把df['date']的数据类型转换为日期时间类型。 接下来,我们可以使用datetime模块中的weekday函数来获取星期信息。weekday函数返回的值为0到6,分别对应星期一到星期日: df['weekday'] = df['date'].dt.weekday 这将在df数据框中新增名为"weekday",其中包含了对应日期的星期信息。 最后,我们可以打印出df数据框的内容,以查看提取的结果: print(df) 这样,我们就成功地提取了df数据框中"date"的星期信息,并将结果保存在了"weekday"中。 ### 回答3: 使用pandas提取某中的星期需要借助于datetime模块中的功能。可以按照以下步骤进行操作: 首先,将待提取星期的转换为datetime类型。可以使用pandas的to_datetime()方法将转换为datetime类型的数据。 例如,假设有一个名为df的DataFrame,其中包含一个名为'date'的,表示日期。可以使用以下代码将该转换为datetime类型: ``` df['date'] = pd.to_datetime(df['date']) ``` 接下来,可以利用dt属性中的功能提取星期。通过使用'dayofweek'属性,可以从日期中提取出星期,其中0表示星期一,1表示星期二,依此类推。 例如,假设要提取的星期存储在名为'week'的中,可以使用以下代码提取星期: ``` df['week'] = df['date'].dt.dayofweek ``` 这将在DataFrame中创建一个新的'week',并将每个日期对应的星期进行填充。 最后,可以根据需要对提取的星期进行进一步的处理和分析,例如统计每个星期出现的次数、绘制柱状图等。 总结起来,使用pandas提取某中的星期需要将该转换为datetime类型,然后利用dt属性中的'dayofweek'功能提取星期。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值