【问题标题】:Python DataFrame memory leak when using the at method使用 at 方法时 Python DataFrame 内存泄漏
【发布时间】: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


【解决方案1】:

只有在数据帧中使用字符串类型时才会出现内存泄漏,使用浮动时内存泄漏消失了。

我最初是在数据框中添加字符串,这些字符串是百分比形式的字符串,例如17% 而不是 0.17。移动到浮动后,一切都按预期工作

【讨论】:

    猜你喜欢
    • 2014-05-04
    • 2018-05-12
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 2011-12-13
    相关资源
    最近更新 更多