【问题标题】:Pandas memory releasePandas 内存释放
【发布时间】:2018-08-14 15:33:28
【问题描述】:

我正在尝试理解 python 中的del 运算符。我正在合并两个大数据框并尝试删除参与的数据框。

new_df = pd.merge(df1, df2, on='level', how='inner')
del df1
del df2

这会释放 df1 和 df2 分配的内存还是只删除引用?

我也尝试过使用gc.collect,但是在合并后的第一次操作中出现内存错误

【问题讨论】:

    标签: python pandas memory


    【解决方案1】:

    不,del 没有任何与内存管理或垃圾收集有关。它只会减少一个称为引用计数器的东西——每个对象都有一个。

    一旦对象的引用计数器降至 0,这意味着它不再可以通过任何变量访问,并且将在收集器下一次执行其操作时被垃圾回收。

    因此,总而言之,只要当前没有其他变量引用该对象,对一个对象调用 del 最终会导致其内存被回收。

    另见Is there a way to get the current ref count of an object in Python?

    【讨论】:

    • 谢谢。那么释放df1和df2分配的内存最好的方法是什么?
    • @niyas del 将减少引用计数器。如果计数下降到 0(即没有其他变量指向相同的对象),那么内存最终将被回收。要强制垃圾回收,请使用import gc; gc.collect()
    • @COLDSPEED 我尝试使用 gc,但它似乎不起作用。合并后的第一次操作中出现内存错误。
    • @niyas 啊,我明白你的问题是什么了。不幸的是,你找错了树。合并期间发生内存错误,当您需要内存中的两个数据帧来创建第三个时。尝试使用dask 或 spark 查看分布式数据帧,它们在处理大数据方面要好得多。
    猜你喜欢
    • 2016-06-17
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 2013-12-23
    • 2013-12-05
    • 2015-04-22
    • 2011-01-17
    相关资源
    最近更新 更多