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

如何使用pandas获取两个数据表之间的差异数据?

Pandas提取两个DataFrame差异行操作指南

针对两个行数有差异、列结构相近的DataFrame,优先用主键/全字段匹配合并的方式找差异,不要靠行号切片,避免排序不一致导致结果错误,具体操作如下:

  • 前置处理:先提取两个表的公共列作为匹配依据,如果有能唯一标识一行的主键(比如订单ID、用户ID),直接用主键当匹配键效率最高;没有唯一主键的话,用全部公共列做组合匹配即可。
  • 核心实现用merge的来源标记功能,几十万行数据量下性能足够,不会卡顿:
import pandas as pd

# 约定 df_a 为693407行的表,df_b 为829768行的表
# 提取两表公共列,避免列名/列数不一致引发报错
common_columns = list(set(df_a.columns) & set(df_b.columns))

# 外连接合并,添加_merge字段标记每行的归属
merge_result = df_a.merge(
    df_b[common_columns],
    on=common_columns,
    how="outer",
    indicator=True
)

# 筛选仅在长表(df_b)中存在的行,就是多出来的136361条差异数据
diff_data = merge_result[merge_result["_merge"] == "right_only"].drop(columns="_merge")

# 若需要找df_a存在、df_b不存在的行,筛选_merge值为left_only即可;两表共有的行标记为both

注意事项:匹配前先确认公共列的数据类型一致,比如同一个ID字段一个存成字符串、一个存成整数,会导致同一条数据被误判为差异;如果字段里有空值NaN,该方法可以正常识别匹配,不需要额外填充处理。

  • 特殊场景简化方案:如果能100%确认两个表的行排序逻辑完全一致,只是存在部分行新增/缺失,也可以用去重法快速取差,但通用场景不推荐,一旦行序错乱结果完全不可用:
# 仅适合行序严格对齐的场景
diff_data = pd.concat([df_b, df_a, df_a]).drop_duplicates(keep=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 21:03:17