Pandas数据分析(中)|一文入门pandas数据处理
本文包括以下几部分数据筛选数据统计空值/NaN处理字符类型处理时间序列类型处理数据筛选按照筛选方式的不同,可以将数据筛选分为以下两种:两者的区别在于前者返回满足条件的数据,后者将不满足条件的以NaN值填充。使用表达式/布尔值筛选,即直接在“下标”中写出过滤条件,返回满足条件的数据。使用where()方法筛选数据,通过DataFrame.where(表达式) 可以筛选出满足条件的数据,同时不满足表达
本文包括以下几部分
-
-
数据筛选
-
数据统计
-
空值/NaN处理
-
字符类型处理
-
时间序列类型处理
-
数据筛选
按照筛选方式的不同,可以将数据筛选分为以下两种:
- 通过表达式/布尔值筛选数据
- 使用where方法筛选数据
两者的区别在于前者返回满足条件的数据,后者将不满足条件的以NaN值填充。
#测试数据data = pd.read_excel('test.xlsx',index_col=0)

使用表达式/布尔值筛选,即直接在“下标”中写出过滤条件,返回满足条件的数据。
#查看性别为女的数据data[data['性别'] == '女']

使用where()方法筛选数据,通过DataFrame.where(表达式) 可以筛选出满足条件的数据,同时不满足表达式的数据将以“NaN”值填充并一起返回。
data.where(data['年龄']>17)

数据统计
pandas提供一些函数实现对Series/DataFrame数据常见的数学或统计计算。
普通统计函数:
count() #统计非空值mean() #平均值median() #中位数min() #最小值max() #最大值std() #标准差var() #方差cov() #协方差矩阵corr() # 连续变量的相关系数describe() #统计汇总
分组/交叉统计:
groupby() # 和SQL分组指令一样。pivot_table(values=None,index=None,columns=None,aggfunc='mean',fill_value=None,margins=False,dropna=True,margins_name='All',observed=False,)
#样例数据2np.random.seed(20220518) #随机种子data1 = pd.DataFrame(np.random.normal(2,3,(100,5)),columns=['a','b','c','d','e'])data1.head()

|
|
输出: 2.486358794605031 2.4862.127531746420967 9.90200833974934 |
使用describe()方法完成快速统计
data1.describe()

以上是针对数值类型做统计计算,当对非数据类型运行describe()时,将统计以下内容:
count() #非空数据unique()#去掉重复值的数量top() # 出现频率最多的值frep() #top值的数量
|
count 6 unique 2 top 男 freq 4 Name: 性别, dtype: object |
空值/缺失值处理
本节介绍DataFrame处理缺失值的四个重要函数:
- isnull() -判断空值/NaN值
- notnull() -判断非空值/NaN
- dropna() -删除空值/NaN
- fillna() -填充空值/NaN
#样例数据2data2 = pd.DataFrame([[np.nan, 2, np.nan, 0],[3, 4, np.nan, 1],[np.nan, np.nan, np.nan, 5],[np.nan, 3, np.nan, 4]],columns=list('ABCD'))data2

#判断为空值data2.isnull()

#判断非空值data2.notnull()

#删除空值 --默认按行 axis=0 或 axis='index'data2.dropna()

当指定axis=0/axis='index'时(默认),凡是一行包含缺失值,则整行删除。因此上面返回空。
当指定axis=1/axis='columns'时,凡是此列中包含空值,则整列删除。如下
#删除空值-- 按列 axis=1 或 axis='columns'data2.dropna(axis=1)

#填充空值--指定值100填充全部空值data2.fillna(value=100)

#填充空值--指定列和对应列填充值fill_values = {'A': 8, 'B': 9, 'C': 99, 'D': 66}data2.fillna(value=fill_values)

#填充空值--指定填充方式method 默认None#向后填充 method='bfill'data2.fillna(method='bfill')data2.fillna(method='bfill',axis=1)#向前填充 method='ffill'data2.fillna(method='ffill')
|
原始
|
向后填充
|
|
向后填充,且axis=1
|
向前填充
|
字符类型处理
Pandas提供一些类似python的字符处理函数,来高效的处理字符串。
这些函数可以非常方便的操作字符串类型的Series对象(DataFrame的一列就是一个Series)。
区别于Pytho操作字符串的函数/方法,Pandas中用来处理字符类型的Series通常以str开头。方法名字和Python内置字符串处理函数大多数一样。
此外,特别介绍一下在机器学习特征工程中常用的两个特殊方法get_dummies()-哑变量生成 和 to_nuumeric()-数值类型修复。
常见字符处理函数:
#大小写转换str.lower()str.upper()#空白处理str.strip()str.lstrip()str.rstrip()#拆分str.split()#切片str.slice()#替换str.replace()#拼接str.cat() #按照索引位置拼接str.join() #指定连接符拼接#判断包含子字符串str.contain()str.startswith()str.endswith()str.match()str.findall() #提取符合指定正则模式的片段#子字符串提取str.extract()str.extractall()
#样例数据3data3 = pd.DataFrame({'a':['甲','乙',np.nan,'丁'],'b':['A','B','C','D']})data3

cat()会按照索引进行拼接,遇到NaN会自动跳过。

指定连接符和NaN值填充

其余常见自符处理函数和Python自带的函数大多类似,因此例子省略。
get_dummies()
常常使用get_dummies()来处理某一列具有固定分隔符的字符串,使其生成哑变量。该方法在机器学习特征工程中十分常用。

to_nuumeric()
使用Pandas导入外部文件时,当一列原本为数据类型的数据,某一单元格混入非数值的字符串时,将导致本来应为数据类型的值被转为Object类型。
如以下一个文件,C7单元格错入一个字符‘-’。

pandas读取文件并查看信息如下:

月薪这一列的数据类型变成了Object类型。
使用to_numeric() ,参数errors='coerce' 即可将其转为数据类型,并将不合法的异常值置为NaN。

变为NaN后就可以根据NaN值处理方法来处理了。十分好用~
日期与时间序列处理
这部分介绍时间日期类型定义及pandas日期时间序列的常见处理方法。
日期时间生成基础
- 定义生成
使用 datetime 包。
- 解析生成
1.dateutil包的parser
2.pandas的to_datetime()
- pands时间序列生成
1. date_range()
2.period_range()
| 定义生成 |
12:34:56 2022-12-01 12:32:56 |
| 解析生成(从非标准的包含日期时间内容的字符串中解析) |
|
使用dateutil包
datetime.datetime(2022, 5, 24, 0, 0) |
|
pandas的to_datetime()方法
Timestamp('2022-05-24 00:00:00') |
时间序列生成
date_range()
pd.date_range(start=None,end=None,periods=None,freq=None)

period_range()
pd.period_range(start=None,end=None,periods=None,freq=None,name=None)

时间序列索引
Pandas中时间类型可以作为索引,生成方法为Pandas的DatetimeIndex().
DateIndex = pd.DatetimeIndex(['2021-2-1','2021-3-1','2022-4-1','2022-5-1'])data5 = pd.Series([1,2,3,4],index=DateIndex)data5
2021-02-01 1 2021-03-01 2 2022-04-01 3 2022-05-01 4
dtype: int64
时间类型索引和普通索引一样使用。
data5['2022-02-01']

此外,pandas支持时间序列索引筛选,比如只看2022年的,索引会自动过滤掉其他年份的索引值。
data5['2022']

日期时间索引处理函数:
-
pct_change() -计算当前值与前一个值的变化率。
-
rolling() -对数据范围应用函数。
-
between_time() - 选取指定时间段的数据。
-
resample - 指定时间序列的频率采样。


更多推荐






所有评论(0)