2014-11-14 115 views
0

我试图循环遍历指定的文件夹,其中包含一堆.csv文件。目的是收集每个文件中列出的三个度量标准,将其添加并输出到合并的,即将生成的python csv文件中的一行中。循环访问csv文件并将计算结果输出到一个整合的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 

我可以在控制台上打印出所有的收入项目,所以我知道它是通过每一个文件正确计算,并生成一个“data.csv”文件,但它仍然在0kb,并没有写入任何内容,所以我怀疑这是我犯了一个错误的地方。

这就是我希望我的“data.csv”文件看起来像:

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] 

希望我提供的所有信息有用位,竭诚为客户提供其他任何东西。

在此先感谢!

+0

您的意思是增加计数,然后使用(1 +计数)为results_output.gross_revenue的索引? ie..you本质上增加了两次(只有一个增量是永久性的) – iLoveTux 2014-11-14 22:29:27

回答

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)

+0

谢谢cd98,我删除了我以前的评论;我犯了一个错误(菜鸟新手错误),导致IndexError - 这个工作的想法,谢谢! – ploo 2014-11-18 14:21:27