如何从内存中删除多个pandas(python)数据帧以节省RAM?

问题描述 投票:28回答:4

我有许多数据帧作为预处理的一部分创建。由于我有6GB内存限制,我想从RAM中删除所有不必要的数据帧,以避免在scikit-learn中运行GRIDSEARCHCV时内存不足。

1)是否只有列出的功能,当前加载到内存中的所有数据帧?

我尝试了dir()但它提供了许多除dataframe之外的其他对象。

2)我创建了一个要删除的数据帧列表

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

& 然

for i in del_df:
    del (i)

但它没有删除数据帧。但是,如下所示单独删除数据帧是从内存中删除数据帧。

del Gender_dummies
del col
python memory-management pandas dataframe ram
4个回答
46
投票

del语句不删除实例,它只删除一个名称。

当您执行del i时,您只删除名称i - 但实例仍然绑定到其他名称,因此它不会被Garbage-Collected。

如果要释放内存,则必须对数据帧进行Garbage-Collected,即删除对它们的所有引用。

如果您动态创建日期框列表,则删除该列表将触发垃圾收集。

>>> 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

15
投票

在python自动垃圾收集中释放变量(pandas DataFrame也只是python方面的另一个对象)。有不同的垃圾收集策略可以调整(需要重要的学习)。

您可以使用手动触发垃圾回收

import gc
gc.collect()

但是不鼓励频繁调用垃圾收集,因为这是一项代价高昂的操作,可能会影响性能。

Reference


5
投票

这将删除数据帧并释放RAM /内存

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

1
投票

我注意到这个问题还没有被接受的答案。我发现答案here特别有用,至少在我的个人经历中。

本质上,即使gc.collect()也不能确保您恢复RAM,但在不同的流程中运行中间数据帧将确保在流程结束时返回流程所采用的资源。该链接还提供了有关如何减少Pandas的内存使用情况的提示。

© www.soinside.com 2019 - 2024. All rights reserved.