python - 比较 2 个 csv 文件数据时的问题
问题描述
我有 2 个 csv 文件,我想比较和打印 fil2.csv 中不同或不存在的行。
value data
a 67
b 654
c 87
d 789
e 23
文件2.csv
value data
a 67
b 654
c 87
d 7
期望的输出
d 789
e 23
我尝试了这段代码,但它无法打印差异。
reader1 = csv.reader(open(file1.csv, 'r'), delimiter=',', quotechar='"')
data = next(reader1)
reader2 = csv.reader(open(file2.csv, 'r'), delimiter=',', quotechar='"')
data2 = next(reader2)
if (data[0] != data2[0]) and (data[1] != data2[1]):
print(data[0] , data[1])
解决方案
您可以使用几个布尔掩码来做到这一点:
import pandas as pd
d1 = [{'value': 'a', 'data': 67},
{'value': 'b', 'data': 654},
{'value': 'c', 'data': 87},
{'value': 'd', 'data': 789},
{'value': 'e', 'data': 23}]
d2 = [{'value': 'a', 'data': 67},
{'value': 'b', 'data': 654},
{'value': 'c', 'data': 87},
{'value': 'd', 'data': 7}]
df1 = pd.DataFrame(d1)
df2 = pd.DataFrame(d2)
print(df1)
value data
0 a 67
1 b 654
2 c 87
3 d 789
4 e 23
print(df2)
value data
0 a 67
1 b 654
2 c 87
3 d 7
not_in = ~df1['value'].isin(df2['value'])
data_diff = df1[~not_in]['data'] != df2['data']
print(df1[not_in | data_diff])
value data
3 d 789
4 e 23
对于这个答案df1
,df2
并且用于代替reader1
和reader2
通过pd.read_csv()
。