web-dev-qa-db-fra.com

Comment supprimer plusieurs images pandas (python) de la mémoire pour économiser de la RAM?

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

L'instruction 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

Si vous avez créé des variables, vous devez toutes les supprimer.

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

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.

référence

16
shanmuga

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()
5
hardi