我需要读取数千个csv文件,并在Python中将它们输出为单个csv文件。
每个原始文件都将用于在最终输出中创建单行,其中列是对原始文件的行的某种操作。
由于文件的合并大小,这需要花费许多小时来处理,并且也不能完全加载到内存中。
我可以读入每一个csv并将其从内存中删除以解决RAM问题。但是,我目前正在迭代地阅读和处理每一个csv(在Pandas中),并将输出行附加到最终的csv,这看起来很慢。我相信我可以使用多处理库让每个进程读取和处理自己的csv,但不确定是否有比这更好的方法。
在有RAM限制的情况下,用Python完成这个任务的最快方法是什么?
例如,ABC.csv和DEF.csv将被读取并处理到最终输出csv中的单独行中。(实际文件将有数十列和数十万行)
ABC.csv:
id,col1,col2
abc,2.3,3
abc,3.7,5
abc,3.0,9
DEF.csv:
id,col1,col2
def,1.9,3
def,2.8,2
def,1.6,1
最终输出:
id,col1_avg,col2_max
abc,3.0,9
def,2.1,3
1条答案
按热度按时间4uqofj5v1#
我建议使用
dask
,它是一个允许对大型数据集进行并行处理的库。代码说明
dd.read_csv
将读取当前目录中的所有csv文件,并将它们连接到单个 Dataframe 中。df.groupby('id').agg({'col1': 'mean', 'col2': 'max'})
将按id
列对 Dataframe 进行分组,然后计算每组的col1
的平均值和col2
。df.to_csv('output.csv')
会将 Dataframe 写入csv文件。性能
我在我的机器上测试了这个程序,其中一个目录包含10,000个csv文件,每个文件有10,000行。
安装
要安装
dask
,请运行pip install dask
。