目前很多流行的数据集都会存在数据缺失的现象。
一般我们在用Pandas处理缺失值的方法有两种:
1.用覆盖全局的掩码来表示缺失值.(用布尔类型来代替原先数据/用0或1来表示)
2.用一个标签值来表示缺失值.(用一个具体的自定义的数据来表示,如-9999. 或用None或NaN)
1.缺失值
具体使用哪种方法还需要看具体情况:
1.用掩码来处理会额外构造一个布尔数组,会增加存储
2.标签值方法缩小了可以被表示的有效值的范围,会增加额外的计算逻辑。而且NaN也不 能够表示所有数据类型。
Pandas的缺失值:1.Python对象类型的缺失值None(Python中不能将None与整数相加)
2.数值类型对象的缺失值NaN(NaN是一种特殊的浮点数,不是整数、字符串等其它数据类型;
且无论对和NaN做哪种操作,最终结果都是NaN)
Pandas中NaN与None的差异:实际上,Pandas把他们看成是可以等价交换的,合适的时候会将他们进行替换。
import pandas as pd import numpy as np
pd.Series([1,np.nan,2,None]) Out[4]: 0 1.0 1 NaN 2 2.0 3 NaN dtype: float64
Pandas对不同缺失值的转换规则:
缺失值转换规则 NA标签值 floating浮点型 无变化 np.nan object对象类型 无变化 None或np.nan integer整数类型 强制转换为float64 np.nan boolean布尔类型 强制转换为object None或np.nan
2.处理缺失值
1. isnull()
创建一个布尔类型的掩码标签缺失值
2. notnull()
与isnull()操作相反
3. dropna(how= , axis=)
返回一个剔除缺失值的数据(无法单独剔除,只能剔除整列或整行)
4. fillna( method= , axis= )
返回一个填充了缺失值的数据副本(一般直接fillna(-9999)就好
method有‘ffill’:从前往后填充
‘bfill’:从后往前填充)