【问题标题】:Looping through csv files and outputting calculations to one consolidated csv file循环遍历 csv 文件并将计算输出到一个合并的 csv 文件
【发布时间】:2023-03-12 06:28:01
【问题描述】:

我正在尝试遍历包含一堆 .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

我可以在控制台上打印出所有收入项目,因此我知道它通过每个文件正确计算,并生成了一个“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]

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

提前致谢!

【问题讨论】:

  • 你的意思是增加count,然后使用(1+count)作为results_output.gross_revenue的索引吗?即..您本质上是递增两次(只有一次递增是永久的)

标签: python python-2.7 loops csv pandas


【解决方案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)

【讨论】:

  • 谢谢cd98,我删除了我之前的评论;我打错字了(菜鸟错了菜鸟),导致了 IndexError - 这个想法很有效,谢谢!
猜你喜欢
  • 2019-04-09
  • 2017-10-02
  • 2014-04-10
  • 2021-08-26
  • 2019-07-21
  • 1970-01-01
  • 2021-08-15
  • 1970-01-01
相关资源
最近更新 更多