看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
对于缺失值,我们的其中常用的一个办法是利于一定的算法去填充它,虽然可能不是特别准确,但对于较大的数据来说不会对结果产生太多影响。关于 fillna() 的详细语法及使用介绍,可以访问:fillna() 填充缺失值。
fillna(x)
可以将缺失值填充指定的值。以下为几种常见的填充方法:
df = pd.DataFrame([[np.nan, 2, np.nan, 0],
[3, 4, np.nan, 1],
[np.nan, np.nan, np.nan, 5],
[np.nan, 3, np.nan, 4]],
columns=list('ABCD'))
# 填充为 0
df.fillna(0)
# 填充为指定字符
df.fillna('missing')
df.fillna('暂无')
df.fillna('待补充')
# 指定字段填充
df.one.fillna('暂无')
# 使填充内容生效
df.one.fillna(0, inplace=True)
# 只替换第一个
df.fillna(0, limit=1)
# 不同列替换不同的值
values = {'A': 0, 'B': 1, 'C': 2, 'D': 3}
df.fillna(value=values)
注意:以上填写不会马上生效,需要重新赋值给 df 或者 inplace=True
。
不指定值,使用一定的方法。
# 使用 method{‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None
# 使用上一个有效值填充
df.fillna(method='backfill')
# 同 backfill
df.fillna(method='bfill')
# 把当前值广播到后边的缺失值
df.fillna(method='pad')
# 同 pad
df.fillna(method='ffill')
总结如下:
fillna(method='ffill') 可以简写为 ffill()
, fillna(method='bfill') 可以简写为 bfill()
填充方法:
# 填充列的平均值
df.fillna(df.mean())
# 对指定列填充平均值
df.fillna(df.mean()['B':'C'])
# 填充列的平均值,另外一个方法
df.where(pd.notna(df), df.mean(), axis='columns')
特别的计算:
# 第一个非空值
df.fillna(method='bfill').head(1).iloc[0]
# 第一个非空值索引
df.notna().idxmax()
df.apply(pd.Series.first_valid_index)
缺失值填充的另外一个思路是使用替换方法 df.replace
。
# 将指定列的空值替换成指定值
df.replace({'toy': {np.nan: 100}})
更新时间:2024-08-09 09:41:39 标签:pandas 缺失值