使用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文件列之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas - 查找两个数据帧之间的差异

如何计算Python Pandas中两列之间的日期差异[重复]

python读取两个csv文件数据,进行查找匹配出现次数

在 sql 中查找两个透视列之间的差异

计算两个 csv 文件之间差异的更快方法

python生成的csv和转换的xlsx文件之间的大小差异