python - 删除和释放单个 Pandas 数据帧的内存

标签 python pandas memory

我在 Pandas 中运行了一个很长的 ETL 管道。我必须创建不同的 Pandas 数据帧,并且我想为某些数据帧释放内存。
我一直在阅读如何释放内存,我看到运行此命令不会释放内存:

del dataframe
点击此链接:How to delete multiple pandas (python) dataframes from memory to save RAM? ,其中一个答案说 del 语句不会删除实例,它只是删除一个名称。
在答案中,他们说将数据框放入列表中,然后删除列表:
lst = [pd.DataFrame(), pd.DataFrame(), pd.DataFrame()]
del lst  
如果我只想发布一个数据框,我需要将它放在一个列表中,然后像这样删除一个列表:
lst = [pd.DataFrame()]
del lst
我也看过这个问题:How do I release memory used by a pandas dataframe?
有不同的答案,例如:
import gc
del df_1
gc.collect()
或者
就在数据帧的最后使用
df = ""
或者有更好的方法来实现这一目标?

最佳答案

从您包含的原始链接中,您必须在列表中包含变量,删除变量,然后删除列表。如果您只是添加到列表中,当您删除列表时,它不会删除原始数据框。

import pandas
import psutil 
import gc
psutil.virtual_memory().available * 100 / psutil.virtual_memory().total
>> 68.44267845153809

df = pd.read_csv('pythonSRC/bigFile.txt',sep='|')
len(df)
>> 20082056

psutil.virtual_memory().available * 100 / psutil.virtual_memory().total

>> 56.380510330200195

lst = [df]
del lst

psutil.virtual_memory().available * 100 / psutil.virtual_memory().total
>> 56.22601509094238

lst = [df]
del df
del lst

psutil.virtual_memory().available * 100 / psutil.virtual_memory().total
>> 76.77617073059082

gc.collect()

>> 0

我也尝试删除数据框并使用 gc.collect() 获得相同的结果!
del df
gc.collect()
psutil.virtual_memory().available * 100 / psutil.virtual_memory().total
>> 76.59363746643066
但是,将数据帧添加到列表和删除列表和变量的执行时间比调用 gc.collect() 快一点。 .我用过 time.time()测量差异和gc.collect()几乎慢了整整一秒!

关于python - 删除和释放单个 Pandas 数据帧的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64368565/

相关文章:

python - 如何以编程方式确定函数/内置/可调用参数的数量?

python - 将数据集与绘图进行比较 - 将虚线与实线混合

python - 在 Pandas 中,每个用户只需要获取特定数量的日期

memory - 场景多的 Cocos2D 项目没有正确释放内存

Java:Mac 上的 Activity 监视器与 JVisualVM 中的内存消耗

python - pyspark 多列条件并返回新列

python - 如何使用 matplotlib 创建具有不同长度的多个数组的直方图,其中 y 轴上有百分比

python-3.x - 如何添加整个数据框行作为散点图注释

python - Pandas Dataframe - 排序日期时出现问题

objective-c - 为什么可变对象不需要双指针?