【发布时间】:2026-01-23 17:00:02
【问题描述】:
我有 100 个 csv 文件,每个文件存储相同数量的列。我不想一次读一个,而是想实现多处理。
为了表示,我创建了 4 个文件:Book1.csv、Book2.csv、Book3.csv、Book4.csv,它们分别在 A 列起始行 1 中存储数字 1 到 5。
我正在尝试以下方法:
import pandas as pd
import multiprocessing
import numpy as np
def process(file):
return pd.read_csv(file)
if __name__ == '__main__':
loc = r'I:\Sims'
fname = [loc + '\Book1.csv', loc + '\Book2.csv', loc + '\Book3.csv', loc + '\Book4.csv']
p = multiprocessing.Pool()
for f in fname:
p.apply_async(process, [f])
p.close()
p.join()
我从link 得到了上述代码的想法。
但是上面的代码并没有产生我期望的结果:
1、2、3、4、5、1、2、3、4、5、1、2、3、4、5、1、2、3、4、5
编辑: 我想将每个文件加载到单独的处理器中并组合文件内容。由于我要加载和合并内容的文件有 100 多个,我希望如果我一次加载 4 个文件(我的 PC 有 4 个处理器)可以加快处理速度。
【问题讨论】:
-
我没有看到您的代码正在产生 any 输出,更不用说预期的输出了。你想达到什么目的?您想如何处理数据?
-
如果您经常使用大量表格数据,您可以查看 dask:dask.pydata.org/en/latest
-
您的代码在将数据帧返回到父进程后会丢弃它们。您可以将
for循环替换为dataframes = pool.map(process, fname)并将它们放入列表中。考虑到操作是 I/O 绑定的,并且您增加了将数据帧从子级传递到父级的开销,您可能会发现这比仅在 1 个进程中读取它们需要更长的时间。 -
@tdelaney “在 1 个进程中读取它们”是什么意思?