缺失值处理

版权声明: https://blog.csdn.net/zheng_weibin/article/details/79359773

pandas使用NaN(Not a Number)表示浮点和非浮点数组中的缺失数据,Python内置的None值也会被当做NA处理,pandas对象上的所有描述统计都排除了缺失数据。

NA处理方法
方法 说明
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)

fillna函数
参数 说明
value 用于填充缺失值的标量值或者字典
method 插值方式,默认为ffill(用前一个数填充缺失值),还有一个bfill指用后一个数填充缺失值
axis 待填充的轴,默认axis=0
inplace 修改调用者对象而不产生副本
limit 对于向前和向后填充,允许连续填充的最大值

其实只要稍微动动脑子,你就可以利用fillna实现许多别的功能,比如传入Series的平均值或中位数

data.fillna(data.mean)

猜你喜欢

转载自blog.csdn.net/zheng_weibin/article/details/79359773