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

Pandas中如何用另一DataFrame对应行列值填充目标DataFrame的NaN?

解决用df_2填充df_1中NaN值的问题

你尝试用df_1.fillna(df_2)无法成功填充NaN,核心原因是默认的fillna依赖行索引+列名的严格匹配,若实际数据中df_2与df_1的行索引并非一一对应(比如行顺序不一致),就会填充失败。从你的示例来看,正确的匹配逻辑应该是基于A列的值关联数据,而非行索引。

解决方法

方法1:按A列对齐后填充

将A列设为索引,让两个DataFrame基于A列的值匹配,再执行填充操作:

import pandas as pd
import numpy as np

# 原始数据
df_1 = pd.DataFrame([
                   [0.1, 2, 55, 0,np.nan],
                   [0.2, 4, np.nan, 1,99],
                   [0.3, np.nan, 22, 5,88],
                   [0.4, np.nan, np.nan, 4,77]
                   ],
                   columns=list('ABCDE'))

df_2 = pd.DataFrame([
    [0.1, 2, 55, 0.5],
    [0.2, 4, 6, 1],
    [0.3, 7, 22, 5],
],
    columns=list('ABCD'))

# 基于A列对齐并填充
df_1 = df_1.set_index('A').fillna(df_2.set_index('A')).reset_index()
print(df_1)

运行后输出与你期望的一致:

A    B     C  D     E
0  0.1  2.0  55.0  0   NaN
1  0.2  4.0   6.0  1  99.0
2  0.3  7.0  22.0  5  88.0
3  0.4  NaN   NaN  4  77.0

方法2:使用combine_first(效果等价)

combine_first同样可以用df_2的非NaN值填充df_1的NaN,逻辑与按索引填充一致:

df_1 = df_1.set_index('A').combine_first(df_2.set_index('A')).reset_index()

原代码失效的原因

如果你的示例中直接用df_1.fillna(df_2)没生效,大概率是行索引未对齐——比如实际数据里df_2的行顺序和df_1不匹配(例如df_2中A=0.3的行不是索引2),此时按行索引填充无法找到对应值。通过A列作为索引,就能确保基于业务主键(A列值)匹配填充,不受行顺序影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:25:48