为了账号安全,请及时绑定邮箱和手机立即绑定

在 python 中比较 CSV

在 python 中比较 CSV

慕标5832272 2023-06-20 16:15:26
如何比较两个 csv,从中寻找file_1.csv没有重复的行file_2.csv并将其打印到文件中?(熊猫打算使用):import pandas as pdoriginal = pd.read_csv('file_1.csv', sep=';')backup = pd.read_csv('file_2.csv', sep=';')n = pd.concat([original,backup], axis=0)n.drop_duplicates(keep='first', inplace=True)n.to_csv('diff.csv', sep=';')File_1.csvA00;A01;B01A10;A11;B12A20;A21;B22....File_2.csv A00;A01;B01A20;A21;B22diff.csv  [Real]A00;A01;B01A20;A21;B22diff.csv  [Expected]A10;A11;B12这让我得到了两个文件之间重复的所有行,而不是 file_1 中 file_2 中缺少的行。这些是大文件和大行数。谢谢
查看完整描述

1 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

pd.concat在这里不起作用,因为您无法判断结果中存在的行是来自原始行还是来自备份。相反,您应该pd.merge在所有列上使用 with indicator=True,它基本上执行外部联接,同时告诉您每一行是否都存在于两者中DataFrames:


>>> merged = df1.merge(df2, how='outer', on=list(df1.columns), indicator=True)

>>> merged

     0    1    2     _merge

0  A00  A01  B01       both

1  A10  A11  B12  left_only

2  A20  A21  B22       both

然后我们可以过滤并删除该_merge列以获得我们期望的结果:


>>> result = merged[merged['_merge'] == 'left_only'].drop(columns=['_merge'])

>>> result

     0    1    2

1  A10  A11  B12


查看完整回答
反对 回复 2023-06-20
  • 1 回答
  • 0 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信