文章目录
pandas缺失值
1、选择缺失值的方法:掩码和标签值
掩码是一个与原数组维度相同的完整布尔类型数组/或者用用一个比特(0/1)表示有缺失值的局部状态
标签值可能是具体的数值,也可能是一些极少出现的形式。还可能是一个更全局的值,比如NaN(不是一个数)表示缺失的浮点数
2、pandas的缺失值
pandas中的缺失值是浮点数据类型的 NaN 值,和python的None对象
3、None:python中的None对象
None是一个单体对象,经常在代码中表示缺失值。
由于None是一个python对象,所以不能作为任何NumPy/Pandas数据类型的缺失值,只能用于‘object’数据类型(由python对象构成的数组)
这种数据类型任何操作都会在python层面进行,所以会比原生的数据类型要消耗更多的资源
如果对数组进行累计操作,比如sum、min,通常都会报错,因为python中没有定义None和整数之间的加法运算
4、NaN:数据类型的缺失值
另一种缺失值的标签是NaN(全称Not a Number,不是一个数字)
只具有NaN的数组,其类型为原生浮点类型,这与前面的None的数据类型不同。
可以将NaN看做一个病毒,任何值与NaN做运算时,结果都为NaN
数组中有忽略缺失值的计算:np.nansum()
, np.nanmax()
, np.nanmin()
谨记:NaN是一种特殊的浮点数,不是整数、字符串或者其他数据类型。
5、NaN和None的差异
在pandas中,他们两是等价交换的,在适当的时候,会将两者进行替换。
pandas会将没有标签值的数据类型自动转换为NA。例如,一个整数类型的数组中的一个值设置为np.nan
时,该数组会自动转换为浮点型,这个值也会变为浮点型数值。
pandas处理缺失值
data = pd.Series([1,2,np.nan,None])
1、发现缺失值:
isnull()/isna() # 缺失值为True,不是缺失值为False,返回一个掩码
例:data.isnull()
或 pd.isnull(data)
notnull()/notna() # 不是缺失值为True,缺失值为False,返回一个掩码
例:data.notnull()
或 pd.notnull(data)
2、剔除缺失值:dropna(axis=0/1, # 按行删除/按列删除
how='any'/'all' # any:只要有一个缺失值就删除;all:该行/列所有都是缺失值,才删除
thresh=3(可以比较的数) # 行/列至少有3个有效值的就保留,其余删除
)
data.dropna()返回一个删除过后的数据,原数据没变。
3、填充缺失值:fillna(method='ffill'/'bfill', # ffill向前填充。bfill向后填充。
axis=0/1 # 按行/列进行填充
)
data.fillna(0) # 填充0
data.fillna(method='ffill') # 按列,向前进行填充
data.fillna(method='bfill',axis=1) # 按照行,向后进行填充
data.fillna(data.mean()) # 填充平均值