【问题标题】:Repeating same processes for multiple csv files对多个 csv 文件重复相同的过程
【发布时间】:2019-05-22 21:31:21
【问题描述】:

我是 Python 的初学者。我有大约 1000 个 CSV 文件(1.csv、2.csv....1000.csv)。每个 CSV 文件有大约 3,000,000,000 行和 14 个变量。我想首先对每个 CSV 文件使用相同的过程来清理每个 CSV 文件中的数据:

  1. 对变量 A 和变量 B 求和,
  2. 按排序日期计算C,如果C中一天的记录数大于50,则丢弃。

接下来,将清理后的数据保存到新的 CSV 文件中。最后,将所有 1000 个新的 CSV 文件追加到一个 CSV 文件中。

我有一些代码如下,但它先导入所有CSV文件,然后处理清理数据,效率非常低。我想先清理每个 CSV 文件中的数据,然后附加新的 CSV 文件。谁可以帮我这个事?任何帮助将不胜感激。

【问题讨论】:

  • 您需要向我们展示您尝试过的内容,并且可能需要与MVCE 对齐的示例输入/输出
  • 1000 个文件,每个文件有 30 亿行?这听起来像是数据库的工作,而不是 Python。您可以使用 Python 读取 CSV 文件并将它们导入数据库,然后通过数据库进行处理。另外,“变量”是什么意思? CSV 文件不包含变量。你是说列吗?
  • 这看起来像是一个熊猫问题,而不仅仅是一个 python 问题。我这么说只是因为您使用带有两行标题数据的pandas.read_csv()。否则,您可以使用 python 的内置 csv 模块进行清理并创建新的 CSV 集。当然,您仍然可以这样做,但您需要在csv.DictReader() 中显式设置字段名,然后忽略前两个标题行。如果这是您愿意采用的方法,请发布您的一个文件的前几行,我或其他人可以提供帮助。

标签: python loops csv


【解决方案1】:

这是我从你的问题中了解到的。我阅读了所有文件,并为总和添加了一个新列。然后我订购日期并删除任何大于 50 的 C 值。之后,我保存更新。在执行此操作之前,您必须复制原始文件,或者您可以使用不同的文件名保存它们。

import glob
import os
import pandas as pd

path = "./data/"
all_files = glob.glob(os.path.join(path, "*.csv")) #make list of paths

for file in all_files:
    # Getting the file name without extension
    file_name = os.path.splitext(os.path.basename(file))[0]
    df = pd.read_csv(file_name)
    df['new_column'] =  df['A']+ df['B']
    df.sort_values(by='C')
    df.drop(df.loc[df['C']>50].index, inplace=True)
    df.to_csv(file_name)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 2022-06-24
    • 2021-09-28
    • 1970-01-01
    • 2021-11-24
    • 2020-07-23
    • 2020-10-25
    相关资源
    最近更新 更多