pandas使用NaN(Not a Number)表示浮点和非浮点数组中的缺失数据,Python内置的None值也会被当做NA处理,pandas对象上的所有描述统计都排除了缺失数据。
方法 | 说明 |
dropna | 根据各标签的值是否存在缺失数据对轴标签进行过滤,可通过阈值调节对缺失值的容忍度 |
fillna | 用指定值或插值方法(如ffill或bfill)填充缺失数据 |
isnull | 返回布尔对象,表示那些值是缺失值/NA,该对象类型与元类型一样 |
notnull | isnull的否定式 |
滤除缺失值
对于一个Series,dropna,返回一个仅含非空数据和索引值的Series
from numpy import nan as NA
data = Series([1,NA,3.5,NA,7])
data.dropna()
Out[31]:
0 1.0
2 3.5
4 7.0
dtype: float64
当然,也可以通过布尔型索引达到效果
data[data.notnull()]
Out[32]:
0 1.0
2 3.5
4 7.0
dtype: float64
对于DataFrame对象,你可能希望丢弃全NA或含有NA的行或列,dropna默认丢弃任何含有缺失值的行。
data = DataFrame([[1,2,3],[1,NA,NA],[NA,NA,NA],[NA,6,3]])
cleaned1=data.dropna() #丢弃含有NA的行
cleaned2=data.dropna(how='all') #丢弃全为NA的行
cleaned3=data.dropna(how='all') #丢弃全为NA的列
cleaned3=data.dropna(thresh=3) #保留三个以上非NA的行
填充缺失数据
大多数情况下,fillna方法是最主要的函数
df.fillna(0) #对所有缺失值填充常数0
df.fillna({'列名1':1,'列名2':2})#通过字典调用fillna,可以实现对不同列填充不同值
fillna默认返回新对象,但也可以就地修改
df.fillna(0,inplace=True)
参数 | 说明 |
value | 用于填充缺失值的标量值或者字典 |
method | 插值方式,默认为ffill(用前一个数填充缺失值),还有一个bfill指用后一个数填充缺失值 |
axis | 待填充的轴,默认axis=0 |
inplace | 修改调用者对象而不产生副本 |
limit | 对于向前和向后填充,允许连续填充的最大值 |
其实只要稍微动动脑子,你就可以利用fillna实现许多别的功能,比如传入Series的平均值或中位数:
data.fillna(data.mean)