pd.read_csv 然后 pd.concat 并行用于多个 txt 文件

pd.read_csv and then pd.concat in parallel for multiple txt files

我找不到任何专门针对此的内容,而且似乎无法获得任何 dask 或 pool 的组合来无误地执行我需要的操作。

我的需要是读取十几个或更多具有特定命名约定的 txt 文件(在四个文件夹中,因此使用递归),然后将它们合并在一起。所有文件都有相同的列名,但每个文件的长度不同。

这是我现在可以做到并让它工作的方法,但我想 运行 并行:

 path1 = my specific filepath

 file_list = glob.glob(os.path.join(path1, "*\XT*.txt"), recursive = 
             True)

 df_each = (pd.read_csv(f, sep = '|') for f in file_list)

 df = pd.concat(df_each, ignore_index = True)

然后有一些小东西需要清理和更改,我已经这样做了:

 df.replace{("#":""}, regex = True, inplace = True

 df.columns = df.columns.str.replace("#", "")

我需要的所有文件的最终目标是对每一列的总和进行汇总,具体分组如下:

 df_calc = df.groupby(['Name1', 'Name2']).sum()

现在 运行 大约需要 30 分钟,并希望同时 运行 缩短这段时间。谢谢!

您在评论中提到您的 CPU 利用率很低,未接近 100%。这意味着您受到磁盘吞吐量或内存带宽的限制。因此,分配更多 CPU 个核心来处理此任务只会减慢它的速度。相反,您应该专注于减少 IO 和内存消耗。

使用 pd.read_csv()usecols 选项是一个很好的开始。此外,尝试传递 engine='c' 和显式 dtype 以避免 Pandas 每次都必须猜测数据类型。

您也可能受益于 SSD。

您还应该考虑以更高效的格式存储数据。例如 np.save() 和朋友制作的格式。这可以将加载速度提高 100 倍。