Pandas合并DataFrame内存占用过高致OOM问题求助
Pandas合并三个DataFrame时内存耗尽问题
我尝试用Pandas完成一项看似简单的操作:合并3个DataFrame,但每次都会出现内存耗尽的情况,试过多种方法都无法解决:
- 试过Polars、R data.table、Dask等其他工具
- 在第二次合并前手动执行
gc.collect() - 试过Stack Overflow上的多数方案
数据与操作细节
- 三个DataFrame均从TSV文件创建,总大小不足2GB,已删除多余列,仅执行简单内连接
- 创建清理完成后,
free -h显示已用内存18GB,剩余40GB - 先合并两个最大的DataFrame:
之后执行dfcombined = df1.merge(df2, left_on="key1", right_on="key2", how="inner")del df1, df2; gc.collect(),这次合并成功,剩余内存从40GB变为38GB - 但合并第三个(最小的)DataFrame时,持续出现OOM错误:
combine = dfcombined.merge(df3, left_on="key1", right_on="key3", how="inner")
数据规模
dfcombined形状:(20786437, 32)df3形状:(2370993, 5)
可能的原因猜测
- 数据类型:多数列设为字符串类型,可能导致内存占用过高。df3的数据示例如下(所有字段需为字符串,最后一个字段并非数字):
index key1 field1 field2 field3 field4 field4 0 "ID1" "A string value" "S" "2" "n/a" 1 "ID1" "Another string" "R" "1" "7/2" 2 "ID1" "New string" "R" "1" "7/2" 3 "ID2" "First string value" "R" "1" "7/2" - 多对多连接:
dfcombined中有大量相同key的行(比如前74行key1相同),键的大量匹配可能导致合并后数据量激增,但不确定是否会达到占用64GB+内存的程度。
补充信息
与他人交流后确认:dfcombined中有1151147个唯一键,df3中有139162个,OOM错误的原因已基本明确。
内容的提问来源于stack exchange,提问作者jimh
相关产品推荐
相关产品推荐

