加速读取和操作 30,000 个 csv 文件

Speeding up reading and operating on 30,000 csv files

我正在使用 Python 3 和 pandas(pd.read_csv) 来读取文件。没有headers,分隔符是'|,| '.另外,这些文件不是 .csv 文件,操作系统是 CentOS。

一个文件夹中有30,000个文件,总大小为10GB。每个文件大约有 50-100 行和 1500 列。我读取每个 csv 文件(使用 read_csv)对其进行一些操作并通过 for 循环将它们存储在列表中。在该过程结束时,我有一个数据帧列表。 我想知道如何加快这个过程。 只有 10 列是相关的,因此我使用参数 usecols 进行过滤。单元格输入是字符串,所以我使用 df.astype(float).

将它们转换为浮点数

请注意,我必须分别对每个文件执行操作,然后才将它们附加在一起。

我尝试使用 modin,但它导致速度多次下降。同样使用 modin 会导致每个数据帧中的索引被重复多次,这在正常 pandas.

中不会发生

实现此目的的一种方法是使用延迟的 Dask。 python 和 pandas 的问题在于它会按顺序执行所有操作,这可能会真正降低您的应用程序速度,尤其是混合使用 IO 密集型任务和 CPU 密集型任务时。使用 Dask,您可以并行读取和处理数据,我将采用以下一种方法来执行此操作。

from dask.delayed import delayed
import dask.dataframe as dd
import pandas as pd

file_names = () # Generator with filenames, create your own generator here


@delayed
def read_data(file_name):
    return pd.read_csv(file_name)


@delayed
def process(df):
    # Do the stuff here
    return df


data = [process(read_data(file_name)) for file_name in file_names]
data = dd.compute(data)
print(data)