如何合并两个DataFrame并使用另一个DataFrame的数值替换空值
pd.concat仅负责将两个DataFrame沿指定轴拼接,对于同名列不会做重叠值补全处理,只会保留两份重命名后的同名列。可以用以下两种方案实现需求:
方案1:用combine_first实现(推荐,代码最简)
combine_first的原生逻辑就是用第二个DataFrame的非空值填充第一个DataFrame的对应位置空值,同时自动保留两个DataFrame的所有列,完全匹配你的需求:
import pandas as pd import numpy as np # 构造示例df1 df1 = pd.DataFrame([ [np.nan, 1, 2, 3, 6], [4, 5, 6, np.nan, 7] ], columns=['A', 'B', 'C', 'D', 'G']) # 构造示例df2 df2 = pd.DataFrame([ [2, 1, 2, 3, 4, 5], [4, 5, 6, 8, 8, 8] ], columns=['A', 'B', 'C', 'D', 'E', 'F']) # 核心合并补全代码 result = df1.combine_first(df2) # 可选操作:调整列顺序和数值类型,匹配你给出的结果格式 result = result[['A','B','C','D','E','F','G']].astype(int)
输出结果和你要求的完全一致。
方案2:用update实现(适合直接修改原df1的场景)
如果你不需要保留原始df1,想直接在df1的基础上修改,可以用update方法,额外新增df2独有的列即可:
# 仅替换df1的空值,不覆盖原有非空值 df1.update(df2, overwrite=False) # 新增df2中独有的E、F列 df1[df2.columns.difference(df1.columns)] = df2[df2.columns.difference(df1.columns)]
内容的提问来源于stack exchange,提问作者viktor_dmitry
相关产品推荐
相关产品推荐

