前処理の一部として作成された多くのデータフレームがあります。 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
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
pythonでは、自動ガベージコレクションが変数の割り当てを解除します(pandas DataFrameは、Pythonの観点からも別のオブジェクトです)。微調整できるさまざまなガベージコレクション戦略があります(重要な学習が必要です)。
を使用してガベージコレクションを手動でトリガーできます。
import gc
gc.collect()
ただし、ガベージコレクションを頻繁に呼び出すことは、コストのかかる操作であり、パフォーマンスに影響を与える可能性があるため推奨されません。
これにより、データフレームが削除され、RAM /メモリが解放されます
del [[df_1,df_2]]
gc.collect()
df_1=pd.DataFrame()
df_2=pd.DataFrame()