最后一次更新日期: 2019/3/21
pandas
是基于numpy
的数据分析库,提供一些更易用的数据模型和大量高效的统计方法。
使用前先导入模块:
import pandas as pd
按需导入以下模块:
import numpy as np
import matplotlib.pyplot as plt
1. 更新
In [259]: df=pd.DataFrame({'a':[1,2],'b':[3,4]})
In [260]: df.iloc[0,0]=0
In [261]: df[df>2]+=1
In [262]: df
Out[262]:
a b
0 0 4
1 2 5
In [265]: df['a']=[2,1]
In [266]: df
Out[266]:
a b
0 2 4
1 1 5
In [268]: df[:]=[1,2]
In [269]: df
Out[269]:
a b
0 1 2
1 1 2
更新数据的方式与numpy一样,索引筛选数据后直接赋值就行了,可以对所有元素赋值同一个标量,也可赋值同样形状的数据集,或是对DataFrame
每行赋值同样的数据序列。
2. 增加
In [246]: df=pd.DataFrame({'a':[1,2],'b':[3,4]})
In [247]: df['c']=[5,6]
In [248]: df
Out[248]:
a b c
0 1 3 5
1 2 4 6
In [252]: df.loc[2]=-1
In [253]: df
Out[253]:
a b c
0 1 3 5
1 2 4 6
2 -1 -1 -1
In [254]: df.insert(0,'new',[0,0,0])
In [255]: df
Out[255]:
new a b c
0 0 1 3 5
1 0 2 4 6
2 0 -1 -1 -1
借助索引器可直接为新行或是新列赋值。
insert
方法可以在指定位置插入新列,loc
参数指定位置索引,column
参数指定列名,value
指定新列的数据。
3. 删除
In [276]: df=pd.DataFrame({'a':[1,2,3],'b':[4,5,6]})
In [277]: df[df['a']>2]
Out[277]:
a b
2 3 6
In [281]: df.drop([0,2])
Out[281]:
a b
1 2 5
In [282]: df.drop('a',axis=1)
Out[282]:
b
0 4
1 5
2 6
删除数据最灵活的方法就是通过索引筛去不需要的数据。
也可通过drop
删除指定索引标签的数据,labels
指定要删除的标签,可以是标量或是列表,axis
参数指定查找索引标签的轴,默认为0。该方法是根据索引标签而不是位置去删除的,所以如果指定标签存在重复,这些数据会一起被删除。
4. 重构索引
In [246]: df=pd.DataFrame({'a':[1,2],'b':[3,4]})
In [256]: df.reindex(columns=['a','b','c','d'],fill_value=0)
Out[256]:
a b c d
0 1 3 0 0
1 2 4 0 0
reindex
方法用于重构索引,可以实现复杂的结构变更,包括行列的增加、删除、移位,index
设置新的行索引,columns
参数设置新的列索引,已存在的索引会和数据一起被移至新的位置,不存在的将被创建,fill_value
参数可以指定新增行列的填充值。
5. 行列转置
In [133]: df=pd.DataFrame({'a':[1,2],'b':[3,4]})
In [134]: df
Out[134]:
a b
0 1 3
1 2 4
In [135]: df.T
Out[135]:
0 1
a 1 2
b 3 4
DataFrame.T
用于实现行列转置,整个数据集将沿左上至右下的对角线翻转。
Series
调用转置方法是无效的,如果需要转置,先调用to_frame
方法转为DataFrame
。
6. 缺失值填充
In [95]: df=pd.DataFrame({'a':[np.nan,1,3],'b':[2,np.nan,6]})
In [96]: df
Out[96]:
a b
0 NaN 2.0
1 1.0 NaN
2 3.0 6.0
In [97]: df.fillna(0)
Out[97]:
a b
0 0.0 2.0
1 1.0 0.0
2 3.0 6.0
In [98]: df.fillna(df.mean())
Out[98]:
a b
0 2.0 2.0
1 1.0 4.0
2 3.0 6.0
In [120]: df.dropna()
Out[120]:
a b
2 3.0 6.0
In [121]: df[df.isna()]=0
In [122]: df
Out[122]:
a b
0 0.0 2.0
1 1.0 0.0
2 3.0 6.0
fillna
方法用于直接填充缺失值,可传入标量,对所有列填充同样的值,也可传入字典或系列,对不同列填充不同的值。
dropna
方法用于直接删除带却缺失值的行或列:axis
参数指定删除行(0)或列(1);how
参数指定删除的条件,'all'
表示全部值为NaN时删除,'any'
表示有一个为NaN时删除;thresh
参数设置在出现几个NaN时执行删除。
isna
方法配合索引器也能对缺失值进行更新,可通过赋值标量对所有列填充同样的值,或是赋值序列对不同列填充不同的值。