使用python查找两个csv文件列之间的差异
Posted
技术标签:
【中文标题】使用python查找两个csv文件列之间的差异【英文标题】:Find difference between two csv file column wise using python 【发布时间】:2021-01-20 10:39:00 【问题描述】:我有两个 csv 文件 文件1.csv
col1,col2,col3
1,2,3
4,5,6
7,8,9
file2.csv
col1,col2,col3
0,2,3
4,0,6
7,8,9
我想比较这两个文件的列输出结果到另一个文件。 文件3.csv
col1,col2
1,0
0,5
0,0
我试过的代码,
import csv
with open('file1.csv', 'r') as t1:
old_csv = t1.readlines()
with open('file2.csv', 'r') as t2:
new_csv = t2.readlines()
with open('file3.csv', 'w') as out_file:
line_in_new = 1
line_in_old = 1
leng=len(new_csv)
out_file.write(new_csv[0])
while line_in_new < len(new_csv) and line_in_old < len(old_csv):
if (old_csv[line_in_old]) != (new_csv[line_in_new]):
out_file.write(new_csv[line_in_new])
else:
line_in_old += 1
line_in_new += 1
这是 *** 中的一个答案的一个小改动版本。我怎样才能实现逐列比较。
提前致谢!
【问题讨论】:
你是如何得到文件 3 输出的?你在做什么样的比较?I want to compare these two files column wise output the result to another file. file3.csv
是什么意思?
【参考方案1】:
如果您已阅读您的台词,您可以执行以下操作:
for i in range(min(len(old_csv), len(new_csv))):
for new_value,old_value in zip(new_csv[i].split(","), old_csv[i].split(",")): # you can add slicing here ([start:stop]) to only select certain columns
# write whatever you want to the new file e.g.:
new_file.write(str(int(new_value) - int(old_value)))
我希望这能回答你的问题。
【讨论】:
【参考方案2】:如果两个 CSV 文件中的列数和行数相同,您可以使用 pandas 快速获取差异。
import pandas as pd
df1 = pd.read_csv('file1.csv')
df2 = pd.read_csv('file2.csv')
diff = df1 - df2
diff.to_csv('file3.csv', index=False)
file3.csv
的内容如下所示:
col1,col2,col3
1,0,0
0,5,0
0,0,0
【讨论】:
【参考方案3】:James 的回答是正确的,应该可以解决您的问题。如果您想避免像 ID_col、string_cols 这样的少数列,您可以尝试下面的代码。 cols 是要计算差异的列列表
import pandas as pd
cols = ['req_col1','req_col2','req_col3']
df3 = pd.DataFrame(cols )
df1 = pd.read_csv('file1.csv')
df2 = pd.read_csv('file2.csv')
for col in cols:
df3[col] = df1[col] - df2[col]
df3.to_csv('filepath.csv')
【讨论】:
以上是关于使用python查找两个csv文件列之间的差异的主要内容,如果未能解决你的问题,请参考以下文章