web-dev-qa-db-ja.com

複数のpandas(python)データフレームをメモリから削除してRAMを節約する方法は?

前処理の一部として作成された多くのデータフレームがあります。 6GBのRAMが制限されているため、scikit-learnでGRIDSEARCHCVを実行するときにメモリが不足しないように、RAMから不要なデータフレームをすべて削除します。

1)現在メモリにロードされているすべてのデータフレームのみをリストする機能はありますか?

Dir()を試しましたが、データフレーム以外の多くのオブジェクトを提供します。

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

delステートメントはインスタンスを削除せず、名前を削除するだけです。

del iを実行すると、名前iだけが削除されますが、インスタンスはまだ他の名前にバインドされているため、ガベージコレクションされます。

メモリを解放する場合は、データフレームを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
47
pacholik

pythonでは、自動ガベージコレクションが変数の割り当てを解除します(pandas DataFrameは、Pythonの観点からも別のオブジェクトです)。微調整できるさまざまなガベージコレクション戦略があります(重要な学習が必要です)。

を使用してガベージコレクションを手動でトリガーできます。

import gc
gc.collect()

ただし、ガベージコレクションを頻繁に呼び出すことは、コストのかかる操作であり、パフォーマンスに影響を与える可能性があるため推奨されません。

参照

16
shanmuga

これにより、データフレームが削除され、RAM /メモリが解放されます

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