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

Pandas中fillna用Series填充DataFrame缺失值的行为疑问解析

pandas中fillna按列填充缺失值的行为问题

我尝试用DataFrame的第1列填充第0列和第2列的缺失值,但执行代码后结果不符合预期,下面具体说明:

原始DataFrame

0              1        2
0   NaN         0.076733    0.378676
1   NaN         0.223911    NaN
2   NaN         0.173071    0.534397
3   NaN         0.991686    0.381196
4   0.088309    0.237683    0.003508
5   0.751860    0.494204    0.757413
6   0.630420    0.192947    0.538492

执行代码

df.fillna(df[1])

实际输出

0           1           2
0   0.076733    0.076733    0.378676
1   0.076733    0.223911    0.173071
2   0.076733    0.173071    0.534397
3   0.076733    0.991686    0.381196
4   0.088309    0.237683    0.003508
5   0.751860    0.494204    0.757413
6   0.630420    0.192947    0.538492

预期输出

0           1           2
0   0.076733    0.076733    0.378676
1   0.223911    0.223911    0.223911
2   0.173071    0.173071    0.534397
3   0.991686    0.991686    0.381196
4   0.088309    0.237683    0.003508
5   0.751860    0.494204    0.757413
6   0.630420    0.192947    0.538492

原因解析

df.fillna()默认按**列方向(axis=0)**处理填充值:

  • 当传入Series作为value参数时,pandas会将Series的索引与DataFrame的列名匹配,用对应列名的值填充该列的缺失值。
  • 你的df[1]是行索引为0-6的Series,而DataFrame列名是0、1、2,两者索引完全不匹配,导致pandas无法正确按列映射,最终出现不符合预期的填充结果。

你想要的是按行填充——用每行的第1列值填充该行的缺失值,这需要调整对齐方向。

正确实现方式

方式1:字典映射(你发现的写法)

df.fillna({0: df[1], 2: df[1]})

明确指定每一列的填充值为第1列的Series,pandas会按行索引对齐填充。

方式2:指定axis=1(更简洁)

df.fillna(df[1], axis=1)

axis=1设置按行方向对齐,pandas会用每行的第1列值填充该行的所有缺失值,直接得到预期结果。

内容的提问来源于stack exchange,提问作者Rajib Lochan Sarkar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:35:52