J'ai beaucoup de cadres de données créés dans le cadre du pré-traitement. Depuis que je dispose de 6 Go de mémoire vive, je souhaite supprimer toutes les images inutiles de RAM) afin d'éviter de manquer de mémoire lors de l'exécution de GRIDSEARCHCV dans scikit-learn.
1) Existe-t-il une fonction permettant de répertorier uniquement toutes les images actuellement chargées en mémoire?
J'ai essayé dir () mais cela donne beaucoup d'autres objets que des cadres de données.
2) J'ai créé une liste de cadres de données à supprimer
del_df=[Gender_dummies,
capsule_trans,
col,
concat_df_list,
coup_CAPSULE_dummies]
& couru
for i in del_df:
del (i)
Mais cela ne supprime pas les cadres de données. Mais supprimer des images individuellement, comme ci-dessous, revient à supprimer des images de la mémoire.
del Gender_dummies
del col
del
ne supprime pas une instance, elle supprime simplement un nom.Quand vous faites del i
, vous ne supprimez que le nom i - mais l'instance est toujours liée à un autre nom, elle ne sera donc pas Garbage-Collected.
Si vous souhaitez libérer de la mémoire, vos images doivent être Garbage-Collected, c’est-à-dire supprimer toutes les références à celles-ci.
Si vous avez créé dynamiquement vos images-dates dans la liste, le retrait de cette liste déclenche le nettoyage de la mémoire.
>>> 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
Dans python, la récupération automatique des ordures libère la variable (les pandas DataFrame ne sont également qu'un autre objet en termes de python). Il existe différentes stratégies de récupération des ordures pouvant être modifiées (nécessite un apprentissage important).
Vous pouvez déclencher manuellement la récupération de place à l'aide de
import gc
gc.collect()
Toutefois, les appels fréquents au ramassage des ordures ménagères sont déconseillés car cette opération est coûteuse et peut affecter les performances.
Ceci supprimera le cadre de données et libérera la RAM/mémoire
del [[df_1,df_2]]
gc.collect()
df_1=pd.DataFrame()
df_2=pd.DataFrame()