gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 08:44:56 28 4
gpt4 key购买 nike

我在 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com