Pandas中fillna如何自动选最优方法,用列内非空值替换所有NaN
解决方案
方法1:组合填充(最简单通用)
因为每列的非空值完全一致,先后执行向后填充bfill()和向前填充ffill()即可覆盖所有空值,非空值在列的任意位置都生效:
# 两种执行顺序都可以得到目标结果 df = df.bfill().ffill() # 或 df = df.ffill().bfill()
方法2:指定列非空值填充(逻辑严谨,兼容全类型)
如果要严格用每列的第一个非空值覆盖整列,适配数值、字符串等任意数据类型,还可以用apply实现:
df = df.apply(lambda col: col.fillna(col.dropna().iloc[0]))
如果存在某列全为空的场景,可以加判断避免报错:
df = df.apply(lambda col: col.fillna(col.dropna().iloc[0]) if col.notna().any() else col)
方法3:数值列快捷写法
仅适用于所有列都是数值类型的场景,因为非空值全部相同,直接用列的均值、最大值、最小值都可以直接填充:
df = df.fillna(df.mean()) # 或 df = df.fillna(df.max())
内容的提问来源于stack exchange,提问作者durbachit
相关产品推荐
相关产品推荐

