我正在使用熊猫在约1000-2000个CSV文件集上执行outer
合并。每个CSV文件都有一个在所有CSV文件之间共享的标识符列id
,但每个文件都有一组唯一的3-5列列。每个文件中大约有20,000行独特的id
行。我想要做的就是将它们合并在一起,将所有新列合并在一起,并使用id
列作为合并索引。与Python中的大熊猫进行大型合并时的MemoryError
我用一个简单的merge
调用它:
merged_df = first_df # first csv file dataframe
for next_filename in filenames:
# load up the next df
# ...
merged_df = merged_df.merge(next_df, on=["id"], how="outer")
的问题是,有近2000 CSV文件,我用熊猫抛出的merge
操作获得MemoryError
。我不确定这是否是由于合并操作中的问题造成的限制?
最终的数据框将有20,000行,大致(2000 x 3)= 6000列。这很大,但不够大,无法消耗我使用的内存超过20 GB的计算机上的所有内存。这个大小对于熊猫的操作来说太多了吗?我应该使用类似sqlite的东西吗?在merge
操作中是否可以更改某些操作以使其适用于此规模?
谢谢。
至于内存,你应该能够使用第二代的表达,而不是列表理解...(虽然不知道'concat'的内部工作原理) – root
@root好吧,发生器只能是更好,我认为(最坏的情况下,它只是将它转换为列表):) –
@root好点btw ! (tbh我不知道concat会接受一个发电机!) –