2

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

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

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

我尝试使用 modin,但它导致速度多次下降。此外,使用 modin 会导致每个数据帧中的索引重复多次,这在普通 pandas 中不会发生。

4

1 回答 1

2

一种方法是使用延迟的 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)
于 2020-09-22T18:13:24.713 回答