Pandas学习笔记 07 缺失数据

第七章 缺失数据 总结

1 缺失值的统计和删除

1.1 缺失信息统计 isna/isnull

isna/isnull用于查看单元格缺失情况,缺失返回True,否则返回False

利用Series上的isna或者notna进行布尔索引,可以查看某一列缺失或非缺失的行。

any, all组合,可以查看至少一个/全部 缺失/没有缺失 的行。

df.isna().mean() # 查看缺失比例
df[sub_set.isna().any(1)].head() # 至少有一个缺失

1.2 缺失信息的删除dropna

dropna的主要参数为轴方向默认axis=0、删除方式how='any/all'、删除的非缺失值个数阈值thresh(非缺失值数量小于阈值的相应维度会被删除)、备选的删除子集subset

df.dropna(how='any', subset=['Height', 'Weight']) # 删除身高体重至少有一个缺失的行
df.dropna(axis=1, thresh=df.shape[0]-15) # 删除缺失值超过15个的列

2 缺失值的填充和插值

2.1 利用fillna进行填充

fillna三个常用参数:

  • value为填充值,可以是标量、字典、序列或DataFrame
  • method为填充方式,包括用前值填充ffill和后值填充bfill
  • limit表示连续缺失值的最大填充次数
s.fillna(method='ffill', limit=1) 

# 根据年级进行身高的均值填充,先分组再transform
df.groupby('Grade')['Height'].transform(lambda x:x.fillna(x.mean()))

2.2 插值函数interpolate

interpolate三个常用参数:

  • method插值方法,默认为linear线性插值
  • limit_direction限制插值方向,默认为前向forward,后向为backward ,双向为both
  • limit控制最大连续缺失值插值个数

最近邻插补:nearest,使用最近的非缺失值元素填充。

索引插值:根据索引大小进行线性插值,method='index'

s.interpolate(limit_direction='both', limit=1) # 双向插值
s.interpolate('nearest') # 最近邻插值
# 和索引有关的线性插值,计算相应索引大小对应的值
s.interpolate(method='index')

3 Nullable类型

3.1 缺失记号及其缺陷

python中缺失值用None表示,该元素与除自身外的其他任何元素不相等。

numpy中缺失值用np.nan来表示,该元素除了不和其他任何元素相等之外,和自身的比较结果也返回False,但使用equals函数时两缺失值位置返回True。

由于np.nan为浮点型,与时间类型混合存储会变成object混杂类型,因此,在时间序列的对象中,pandas利用pd.NaT来指代缺失值。

3.2 Nullable类型的性质

包含 Nullable的序列类型不受缺失值的影响,自动转换为pandas内置的pd.NA。三种Nullable序列类型分别是Int, booleanstring

  • Int的序列中,返回的结果会尽可能地成为Nullable的类型;

  • booleanbool类型序列的行为主要有两点区别:

    • 带有缺失的布尔列表无法进行索引器中的选择,而boolean会把缺失值看作False
    • 逻辑运算时,bool类型在缺失处返回False,而boolean会根据逻辑运算是否能确定唯一结果来返回相应的值。

3.3 缺失数据的计算和分组

调用函数sum, prod运算时,缺失数据分别被视作0和1。

调用累计函数运算时,会自动跳过缺失值所处的位置。

单个标量运算时,除了np.nan ** 0 1 ** np.nan运算结果为1.0,其余均为缺失(pd.NA与此一致)。

np.nan在比较操作时一定返回False,而pd.NA返回pd.NA

df_nan = pd.DataFrame({'category':['a','a','b',np.nan,np.nan], 'value':[1,3,5,7,9]})
df_nan.groupby('category', dropna=False)['value'].mean()
posted @ 2022-03-14 21:59  ikventure  阅读(220)  评论(0编辑  收藏  举报