【问题标题】:CSV file value comparison producing a new CSV file with the resultsCSV 文件值比较生成带有结果的新 CSV 文件
【发布时间】:2017-02-23 12:46:20
【问题描述】:

我有两个 .csv 文件,它们只有一行,但有很多列。我希望比较列中的数据(前 3 列除外)并输出一个新的.csv,其中包含文件的减法,计算为baseline - test

test1.csv

20170223, 433000000, 8k, -50, -50, -10, -50, -50

baseline.csv

20170223, 433000000, 8k, -50, -50, -50, -50, -50

生成的.csv 文件应如下所示:

20170223, 433000000, 8k,   0,   0, -40,  -0,  -0

我能够调出.csv 文件,但事实证明是列位置和计算很困难。

这是我目前所拥有的:

import csv
with open('test001.csv', 'r') as f:
reader = csv.reader(f, delimiter = ',')
first_list = list(reader)
f.close()


with open('test002.csv', 'r') as f:
reader = csv.reader(f)
second_list = list(reader)
f.close()

result_list = list()
list_a = list()
list_b = list()

for row in first_list:
    for x in range(0, 6):
    result_list.append(row[x])

for x in range(6, len(row)-1):
    list_a.append(row[x])

for row in second_list:
 for x in range(6, len(row)-1):
    print(row[x])

    list_b.append(row[x])

for x in range(0, len(list_a)-1):    
 a = float(list_a[x])
 b = float(list_b[x])
 c = a-b
result_list.append(c)

myfile = open('difference.csv', 'w')
wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)

wr.writerow(result_list)

myfile.close()

【问题讨论】:

  • 请发布您迄今为止尝试过的内容——代码和错误——以便我们提供帮助!
  • 您可以使用 pandas 读取 csv 文件。然后,您可以有两个数据帧(df1 -> 带有 test.csv / df2 -> 带有基线)您可以创建 df3 = df1 - df2
  • 能否请您显示您正在使用的代码以及您的困难所在?您使用哪些工具来加载.csv?如果有人建议不同的工具,是否可以接受?
  • 您可以编辑您的代码以保留缩进吗?我也认为打印行的内容没有意义。
  • 当您知道每个列表中只有一行时,为什么还要遍历列表行?

标签: python csv analysis subtraction array-difference


【解决方案1】:

假设您已将这些文件读入两个列表 onetwo

然后您可以使用zip 逐个元素地比较这些列表,如下所示:

>>> one = [1, 2, 3]
>>> two = [4, 5, 6]
>>> for o, t in zip(one, two):
...     print(o, t)
... 
(1, 4)
(2, 5)
(3, 6)
>>>

而不是print 实现你自己的逻辑。要从第 4 列开始,只需使用

`zip(one, two)[3:]`

【讨论】:

    【解决方案2】:

    你可以像这样使用pandas

    import pandas as pd
    df1 = pd.read_csv('test1.csv', header=None)
    df2 = pd.read_csv('baseline.csv', header=None)
    
    diff = df1.copy()
    diff[diff.columns[3:]] -= df2[df2.columns[3:]]
    diff.to_csv('difference.csv', index=False, header=None)
    

    【讨论】:

    • 会试试 Pandas。当我收到 "No module named 'pandas'" 错误时,我准备下载 Anaconda3-4。
    • 在cmd中输入conda install -c anaconda pandas=0.19.2
    • 使用上面的代码我得到这个错误 AttributeError: 'function' object has no attribute 'columns'
    • 忘记调用复制方法:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    相关资源
    最近更新 更多