首页 > 解决方案 > 比较 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])

标签: pythonpandasnumpycsvfile-handling

解决方案


您可以使用几个布尔掩码来做到这一点:

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

对于这个答案df1df2并且用于代替reader1reader2通过pd.read_csv()


推荐阅读