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

如何使用pandas对比新表与主表并提取新表中唯一新增行

pandas实现提取新表新增行并追加到主表的方法

实现逻辑

默认ID为唯一主键,匹配ID不在主表中的新表行即为新增唯一行,若需要整行完全匹配可调整匹配逻辑。


分步实现代码

1. 导入库并读取数据

import pandas as pd

# 读取主表和新表,可替换为你自己的文件读取逻辑,比如pd.read_excel、pd.read_csv
# 以下为示例构造数据
df_main = pd.DataFrame({
    'ID': [1,2,3,4,5],
    'Name': ['AA','BB','CC','DD','EE'],
    'Location': ['1234','2345','3456','4567','5678']
})
df_new = pd.DataFrame({
    'ID': [2,4,5,6,7],
    'Name': ['BB','DD','EE','FF','GG'],
    'Location': ['2345','4567','5678','6789','7890']
})

2. 提取新表的新增唯一行

两种常用方案按需选择:

方案1:仅按唯一主键ID匹配(性能更高,适合数据量大的场景)

# ~表示取反,筛选ID不在主表ID列表中的新表行
new_rows = df_new[~df_new['ID'].isin(df_main['ID'])].copy()

方案2:整行完全匹配(更严谨,适合存在主键相同但其他字段更新的场景)

# 外连接合并两张表,新增_merge列标记行来源
merged_df = df_main.merge(df_new, how='outer', indicator=True)
# 筛选仅存在于新表中的行,删除标记列
new_rows = merged_df[merged_df['_merge'] == 'right_only'].drop(columns='_merge').copy()

运行后new_rows的结果与期望输出完全一致:

IDNameLocation
6FF6789
7GG7890

3. 编辑新增行(按需操作)

可对提取出来的new_rows做任意编辑处理,比如修改字段、补充新列等,示例:

# 示例:给新增行补充录入月份字段
new_rows['input_month'] = '2024-05'

4. 追加到主表

# 合并主表和处理后的新增行,ignore_index=True重置索引避免重复
df_main = pd.concat([df_main, new_rows], ignore_index=True)

# 处理完成后可保存主表到文件,比如df_main.to_excel('主表.xlsx', index=False)

注意事项

  • 如果唯一主键是多列组合,可以把方案1的isin条件改成多列合并后判断,或者直接用方案2的整行匹配即可。
  • copy()方法是为了避免后续编辑新增行时触发pandas的链式赋值警告,建议保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:48:02