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

如何对比两个CSV文件中的id与日期数据并提取差异记录

双CSV差异查询(id+dates联合唯一校验)

你的需求是校验以id+dates为联合唯一键的两个CSV的差异,分别输出仅单侧存在的记录,以下是两种可直接落地的实现方案:


方案1:Python Pandas 实现

适合需要后续自定义处理、或CSV有其他额外字段的场景。
首先安装依赖:
pip install pandas

运行代码:

import pandas as pd

# 读取两个CSV文件,统一读为字符串避免格式自动转换导致的不一致
df1 = pd.read_csv('file1.csv', dtype=str)
df2 = pd.read_csv('file2.csv', dtype=str)

# 生成联合唯一键,解决单id对应多日期的匹配问题
df1['unique_key'] = df1['id'] + '_' + df1['dates']
df2['unique_key'] = df2['id'] + '_' + df2['dates']

# 筛选仅在单侧存在的记录
only_file1 = df1[~df1['unique_key'].isin(df2['unique_key'])].drop(columns='unique_key')
only_file2 = df2[~df2['unique_key'].isin(df1['unique_key'])].drop(columns='unique_key')

# 打印结果
print("===== 仅在file1.csv存在的记录 =====")
print(only_file1.to_string(index=False))
print("\n===== 仅在file2.csv存在的记录 =====")
print(only_file2.to_string(index=False))

# 可选:导出差异结果为新CSV
# only_file1.to_csv('only_file1.csv', index=False)
# only_file2.to_csv('only_file2.csv', index=False)

方案2:命令行快速校验(csvkit+comm)

不需要写代码,适合快速临时校验场景。
首先安装工具集:
pip install csvkit

依次执行以下命令:

# 提取两个文件的id、dates列,跳过表头排序后生成临时文件
csvcut -c id,dates file1.csv | csvsort | sed '1d' > f1.tmp
csvcut -c id,dates file2.csv | csvsort | sed '1d' > f2.tmp

# 输出仅在file1存在的记录
echo "===== 仅在file1.csv存在的记录 ====="
comm -23 f1.tmp f2.tmp

# 输出仅在file2存在的记录
echo -e "\n===== 仅在file2.csv存在的记录 ====="
comm -13 f1.tmp f2.tmp

# 清理临时文件
rm f1.tmp f2.tmp

注意事项

  • 两个文件的日期格式必须完全一致,例如3/1/21和03/01/2021会被判定为不同的键,校验前建议先统一日期格式
  • 如果允许同一id+dates存在多条重复记录,可先对两个文件做去重处理再对比

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:48:01