我正在尝试遍历指定的文件夹,其中包含一堆.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]
希望我提供了所有有用的信息,很乐意提供其他任何信息。
提前致谢!
答案 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)
)