猿问

在 python 中比较 CSV

如何比较两个 csv,从中寻找file_1.csv没有重复的行file_2.csv并将其打印到文件中?(熊猫打算使用):


import pandas as pd

original = 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.csv

A00;A01;B01

A10;A11;B12

A20;A21;B22

....


File_2.csv 

A00;A01;B01

A20;A21;B22


diff.csv  [Real]

A00;A01;B01

A20;A21;B22


diff.csv  [Expected]

A10;A11;B12

这让我得到了两个文件之间重复的所有行,而不是 file_1 中 file_2 中缺少的行。


这些是大文件和大行数。谢谢


慕标5832272
浏览 125回答 1
1回答

料青山看我应如是

pd.concat在这里不起作用,因为您无法判断结果中存在的行是来自原始行还是来自备份。相反,您应该pd.merge在所有列上使用 with indicator=True,它基本上执行外部联接,同时告诉您每一行是否都存在于两者中DataFrames:>>> merged = df1.merge(df2, how='outer', on=list(df1.columns), indicator=True)>>> merged     0    1    2     _merge0  A00  A01  B01       both1  A10  A11  B12  left_only2  A20  A21  B22       both然后我们可以过滤并删除该_merge列以获得我们期望的结果:>>> result = merged[merged['_merge'] == 'left_only'].drop(columns=['_merge'])>>> result     0    1    21  A10  A11  B12
随时随地看视频慕课网APP

相关分类

Python
我要回答