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

请问Pandas如何用新DataFrame更新旧表,空值不覆盖原值并新增行

实现步骤

你可以通过设置索引+优先级合并的方式实现需求,完整可运行代码如下:

import pandas as pd
import numpy as np

# 构造示例数据
df1 = pd.DataFrame(np.array([[1, 'A1', 'B1'], [2, 'A2', 'B2'], [3, 'A3', 'B3']]), columns=['ID', 'A', 'B'])
df2 = pd.DataFrame(np.array([[1, 'A1X', 'B1X'], [2, 'A2X', ''], [4, 'A4', 'B4']]), columns=['ID', 'A', 'B'])

# 1. 将ID设为索引,方便按行匹配
df1_idx = df1.set_index('ID')
df2_idx = df2.set_index('ID')

# 2. 处理df2中的空字符串为pd.NA,避免空值覆盖df1的有效值
df2_idx = df2_idx.replace('', pd.NA)

# 3. 合并:优先取df2的非空值,df2缺失的取值用df1补充
df = df2_idx.combine_first(df1_idx).reset_index().sort_values('ID').reset_index(drop=True)

print(df)

运行后输出结果和要求完全一致:

ID    A   B
0  1  A1X B1X
1  2  A2X  B2
2  3   A3  B3
3  4   A4  B4

逻辑说明

  • combine_first方法会以调用方(此处为df2_idx)的非空值为优先,调用方没有的行、列或者空值位置,会用参数传入的df1_idx的对应值补充,完美适配「df2覆盖更新+保留df1原有内容+新增df2独有行列」的需求
  • 提前处理空字符串是为了避免df2里的空字符串被识别为有效值覆盖df1的内容,如果你不需要过滤空字符串可以删除这一步

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:45:02