You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用fillna()批量替换DataFrame多列空值?

解决方法:单行代码批量替换多列空值

针对你的场景,有两种简洁的单行代码可以实现批量替换,完全适配500多列的情况:

方法1:通用场景(目标列含部分非空值也适用)

ddd.iloc[:, 1:] = ddd.iloc[:, 1:].fillna(ddd.a, axis=0)

这个方法只对需要填充的列(从第2列开始的所有列)执行fillna,用a列对应行的值来填充空值,避免了列数不匹配的问题。

方法2:高效场景(目标列全为空值时)

如果要替换的列像示例中一样全是NaN,直接广播赋值效率更高:

ddd.iloc[:, 1:] = ddd.a.values[:, None]

这里通过[:, None]把a列的一维数组转换成二维列向量,Pandas会自动将其广播到所有目标列完成赋值。

为什么你之前的方法失效?

  • 第一种错误ValueError: Columns must be same length as key:你执行ddd[['b','c']]= ddd.fillna(ddd.a)时,右边的ddd.fillna(ddd.a)返回的是完整的3列DataFrame(包含未修改的a列),而左边只指定了2列,列数不匹配导致报错。
  • 第二种方法ddd.iloc[:,1:] = ddd.fillna(ddd.a)无效:右边的结果包含3列,赋值给2列的位置时,Pandas会尝试按列名匹配,但fillna后的a列和目标列b、c列名不对应,无法正确填充。

验证结果

执行上述任意一种方法后,你的DataFrame会变成:

a    b    c
0  1  1.0  1.0
1  2  2.0  2.0
2  3  3.0  3.0

内容的提问来源于stack exchange,提问作者Ajay Chinni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 13:37:39