pandas 如何从内存中删除多个panda(python) Dataframe 以保存RAM?

nr7wwzry  于 2022-12-17  发布在  Python
关注(0)|答案(4)|浏览(354)

在预处理过程中,我创建了很多 Dataframe ,由于我的内存容量有限,所以我希望删除所有不必要的 Dataframe ,以避免在scikit-learn中运行GRIDSEARCHCV时内存不足。
1)是否有仅列出当前加载到内存中的所有 Dataframe 的功能?
我试过dir(),但它给出了很多其他对象,而不是 Dataframe 。
2)我创建了要删除的 Dataframe 列表

del_df=[Gender_dummies,
 capsule_trans,
 col,
 concat_df_list,
 coup_CAPSULE_dummies]

和运行

for i in del_df:
    del (i)

但这不是删除 Dataframe ,而是像下面这样逐个删除 Dataframe ,就是从内存中删除 Dataframe 。

del Gender_dummies
del col
aurhwmvo

aurhwmvo1#

del语句不删除示例,它只删除名称。

当执行del i时,您只删除了名称 i -但示例仍然绑定到其他名称,因此它不会被垃圾收集。
如果要释放内存,必须垃圾收集 Dataframe ,即删除对它们的所有引用。
如果你动态地创建了你的日期帧到列表中,那么移除那个列表将触发垃圾收集。

>>> lst = [pd.DataFrame(), pd.DataFrame(), pd.DataFrame()]
>>> del lst     # memory is released

如果创建了一些变量,则必须将其全部删除。

>>> a, b, c = pd.DataFrame(), pd.DataFrame(), pd.DataFrame()
>>> lst = [a, b, c]
>>> del a, b, c # dfs still in list
>>> del lst     # memory release now
fruv7luv

fruv7luv2#

在python中,自动垃圾收集会释放变量(PandasDataFrame也只是python的另一个对象),有不同的垃圾收集策略可以调整(需要大量的学习)。
您可以使用手动触发垃圾收集

import gc
gc.collect()

但是不鼓励频繁调用垃圾收集,因为这是一个开销很大的操作,而且可能会影响性能。
Reference

xtfmy6hx

xtfmy6hx3#

这将删除 Dataframe 并释放RAM/内存

del [[df_1,df_2]]
gc.collect()
df_1=pd.DataFrame()
df_2=pd.DataFrame()

Dataframe 将被显式设置为空
在上述声明中
首先, Dataframe 的self引用被删除,这意味着在垃圾收集器(gc.collect())收集了 Dataframe 的所有引用,然后显式地将所有引用设置为空 Dataframe 之后, Dataframe 对python不再可用。
https://stackify.com/python-garbage-collection/中详细解释了垃圾收集器的工作原理

czfnxgou

czfnxgou4#

我在笔记本中使用中间 Dataframe ,您可以简单地写:

df = []

其中以前的所有列和行现在都消失了。
事实上,它在那里真的是最小的在这一点上。

相关问题