循环通过csv文件并将计算输出到一个合并的csv文件

时间:2014-11-14 22:16:01

标签: python python-2.7 loops csv pandas

我正在尝试遍历指定的文件夹,其中包含一堆.csv文件。目的是收集每个文件中列出的三个度量标准,将它们相加,然后将其输出到即将生成的整合的python csv文件中的行中。

这是我的代码:

import pandas as pd
import os

results_output = pd.DataFrame(index = None, columns=["gross_revenue","impressions","bid_requests"])
filenames = os.listdir("Z:/some/folder/path")

count = 0

for file in filenames:
    file_path = "Z:/some/folder/path/" + file
    data = pd.read_csv(file_path,skiprows=[0])
    data.columns = ["product1_gross_revenue","product2_gross_revenue","product3_gross_revenue"]
    gross_revenue = (data.product1_gross_revenue[0] + data.product2_gross_revenue[0] + data.product3_gross_revenue[0])
    if gross_revenue > 0:
        count += 1
        results_output.gross_revenue[1+count] = [gross_revenue]
        results_output.to_csv("data.csv",index=False,header=False)

这是错误:

Traceback (most recent call last):
  File "test.py", line 16, in <module>
    results_output.gross_revenue[1+count] = [gross_revenue]
  File "C:\Python27\lib\site-packages\pandas-0.14.1-py2.7-win3
, in __setitem__
    values[key] = value
IndexError: index 2 is out of bounds for axis 0 with size 0

我可以打印出控制台上的所有收入项目,因此我知道它是通过每个文件正确计算的,并且&#34; data.csv&#34;文件是生成的,但它保持在0kb,没有写入任何内容,所以我怀疑这是我犯错的地方。

这就是我想要的&#34; data.csv&#34;文件看起来像:

0 gross_revenue[file1]
1 gross_revenue[file2]
2 gross_revenue[file3]
3 gross_revenue[file4]
4 gross_revenue[file5]
5 gross_revenue[file6]
6 gross_revenue[file7]

希望我提供了所有有用的信息,很乐意提供其他任何信息。

提前致谢!

1 个答案:

答案 0 :(得分:1)

创建results_output数据框时,您将在索引中使用零元素创建它。这就是为什么(我认为)当你试图访问它时它会引发错误。 尝试使用等于文件数的索引创建它。 我也改变了你使用count'的方式,因为我觉得它已经被2了。 我没有测试下面的代码,但如果您发现问题,请尝试并报告

import pandas as pd
import os

filenames = os.listdir("Z:/some/folder/path")
n_files = len(filenames)
results_output = pd.DataFrame(index = range(n_files), columns=["gross_revenue","impressions","bid_requests"])

count = 0

for file in filenames:
    file_path = "Z:/some/folder/path/" + file
    data = pd.read_csv(file_path,skiprows=[0])
    data.columns = ["product1_gross_revenue","product2_gross_revenue","product3_gross_revenue"]
    gross_revenue = (data.product1_gross_revenue[0] + data.product2_gross_revenue[0] + data.product3_gross_revenue[0])
    if gross_revenue > 0:
        results_output.gross_revenue[count] = [gross_revenue]
        results_output.to_csv("data.csv",index=False,header=False)
        count += 1

(稍微更加pythonic,如果你想保持文件的顺序:将count变量放在外面并做for count, file in enumerate(filenames)