【发布时间】:2022-01-06 08:38:48
【问题描述】:
我正在迭代一个 python DataFrame
for index, row in df.iterrows():
...
if condition:
df.at[index, 'col'] = newValue
而且每次df.at执行,我的记忆都会增加一点。
我正在迭代超过一百万行 DataFrame,因此机器内存不足并崩溃。
一些观察:
- 如果我不更新df,内存不会激增,所以内存泄漏是由于使用
at方法更新造成的 - 我尝试将 df 分解为几个块并在每个块之后调用
gc.collect(),或者尝试del df_chunk_i然后gc.collect()但内存没有释放 - 我看到了一些其他有点相关的 SO 问题,建议做
inplace=True,但我看不到这里适用
是否有其他方法可以防止内存泄漏?
【问题讨论】:
-
这能回答你的问题吗? Memory leak using pandas dataframe
-
感谢RoseGod的参考。 gc.collect() 似乎“修复”了该问题(根据 github 线程),但它没有解决上述问题。
-
如果你做一个最小可重复的例子,它会更容易回答你的问题。
-
蒂姆,感谢您的建议实际上解决了我的问题...我试图通过创建随机变量的数据框来重现问题,但问题没有发生。在我最初的问题中,我通过将百分比添加为字符串来更新我的数据框,因此在将所有内容转换为浮点数而不是字符串后,内存泄漏消失了......所以通过处理浮点数而不是字符串,我不再有这个问题了
标签: python dataframe memory-leaks