【问题标题】:Compare 2 csv files with the same header and output a third csv with some calculations比较具有相同标题的 2 个 csv 文件,并通过一些计算输出第三个 csv
【发布时间】:2018-12-20 04:36:42
【问题描述】:

我想比较 2 个 csv 文件并将结果存储在一个新的 csv 文件中。

我有 2 个具有相同标题的 csv(old.csv 和 new.csv)。

如何比较每个值并根据这些值进行计算?

with open('new.csv') as new_csv, open('old.csv') as old_csv:
    reader_old = csv.DictReader(old_csv)
    reader_new = csv.DictReader(new_csv)
    for row_o in reader_old:
        for row_n in reader_new:

            if row_n['Account'] == row_o['Account']:
                amt_diff = float(row_n['Number']) - float(row_o['Number'])
                print(amt_diff)

【问题讨论】:

  • 你可以使用熊猫。如果你放一小部分 csv 样本,你可以使用 pandas 得到答案

标签: python csv compare


【解决方案1】:

Python 有a module called csv,它可以让你对 csv 文件进行各种读取和写入,而无需完成手动编写行来获取字符串、用逗号分解它们等繁琐的任务。例如,您可以使用csv.DictReader() 将行读入字典,其中键与您的列名相同:

import csv
with open('new.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        ranking = row['Ranking']
        percentage = row['Percentage']
        print("The percentage in this row is", percentage)

提取所需内容并进行计算后,您可以使用csv.DictWriter 将数据写入新的第三个 csv 文件。在网络上搜索 python csv module 应该会给您一些示例。

编辑:我阅读了您的评论并看到了您更新的代码。让我们看看你的嵌套循环做了什么,据我所知:

  1. 取旧 CSV 数据的第一行
  2. 取新 CSV 数据的第一行
  3. 比较它们的“帐户”值。如果它们相同,则打印它们的差异(如果两个数字相同,则应该为零,对吗?)
  4. 对旧的第 #1 行和新的第 2 行执行相同操作。
  5. 对旧的第 #1 行和新的第 3 行执行相同操作。
  6. 继续直到您比较旧的第 1 行和新的最后一行。
  7. 用旧的第 #2 行和新的第 1 行重复上述所有操作,然后旧的第 2 行和新的第 2 行,旧的第 2 行旧的和新的第 3 行等。

这就是你想要的吗?还是您只是想逐行比较它们并写下差异?

编辑#2:

我不知道这是否会有所作为,但试试这个吧:

reader_old = csv.DictReader(open("old.csv"))
reader_new = csv.DictReader(open("new.csv"))
for row_o in reader_old:
    for row_n in reader_new:
        amt_diff = float(row_n['Number']) - float(row_o['Number'])
        print(amt_diff)

如果您想将其写入新文件而不仅仅是打印结果,请参阅csv.DictWriter()

【讨论】:

  • 你好比尔,谢谢你的回答。我熟悉 csv 模块,我更新并简化了原始答案。在这种情况下,嵌套的 for 循环并没有真正起作用,但我肯定做错了什么。
  • 这正是我想要的,而不仅仅是差异。问题是上面的代码会在第一行停止迭代。
猜你喜欢
  • 2013-06-24
  • 2013-05-29
  • 2021-11-14
  • 2015-09-01
  • 1970-01-01
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多