处理缺失数据
缺失数据在数据分析应用中比较常见。pandas对象上的所有描述统计都排除了缺失数据。
Pandas使用浮点值NAN(Not a Number)表示浮点和非浮点数组中的缺失数据。它只是一个便于检测的标记而已。Python内置的None值也会被当做NA处理。
由于Numpy的书籍类型中缺乏真正的NA数据类型或位模式,所以Pandas中的处理是简单而可靠的。
处理NA方法
方法 | 说明 |
---|---|
dropna | 根据各标签的值中是否存在缺失数据对轴标签进行过滤,可通过阈值调节对缺失值的容忍度 |
fillna | 用指定值或插值方法(如ffill或bfill)填充缺失数据 |
isnull | 返回一个含有布尔值的对象,这些布尔值表示哪些数据是缺失值,该对象的类型与源类型一样 |
notnull | isnull的否定式 |
1. 过滤缺失数据
过滤掉缺失数据,可以选择手动删除,但使用dropna在处理大量数据时会更加实用。对于一个Series,dropna返回一个仅含非空数据和索引值的Series,当然也可以使用布尔索引达到这个目的。
而对于DataFrame对象,dropna将会默认丢弃任何含有缺失值的行,传入how=‘all’ 将只丢弃全为NA的那些行,如果想丢弃列,仍然只需传入 axis=1即可。
另一个滤除DataFrame行的问题涉及时间序列数据。假设只想留下一部分观测数据,可以使用thresh参数实现此目的。
2.填充缺失数据
有时候我们可能不想或者不能丢弃整行整列,因为那样可能会失去跟它有关的其他有效的数据,能想到的方法就是给它一个默认值使其不在为空。fillna方法就是一个这样的函数,通过一个常数调用fillna就会将缺失值替换为那个常数值。
- 若是通过一个字典调用fillna,既可以实现对不同的列填充不同的值
- fillna默认会返回新的对象,但也可以对现有对象进行原地修改(inplace=True)
- 对reindex有效的插值方法也可以用于fillna
fillna函数的参数
参数 | 说明 |
---|---|
value | 用于填充缺失值的标量值或字典对象 |
method | 插值方式。如果函数调用时未指定其他参数的话,默认为‘ffill’ |
axis | 待填充的轴,默认axis=0 |
inplace | 修改调用者对象而不产生副本 |
limit | (对于前向或后向填充)可以连续填充的最大数量 |