184 votes

Comment libérer la mémoire utilisée par un dataframe pandas ?

J'ai un très gros fichier csv que j'ai ouvert dans pandas comme suit....

import pandas
df = pandas.read_csv('large_txt_file.txt')

Une fois que j'ai fait cela, l'utilisation de la mémoire augmente de 2 Go, ce qui est normal puisque ce fichier contient des millions de lignes. Mon problème est que je dois libérer cette mémoire. J'ai exécuté le programmean....

del df

Cependant, mon utilisation de la mémoire n'a pas diminué. Est-ce la bonne approche pour libérer la mémoire utilisée par un cadre de données pandas ? Si c'est le cas, quelle est la bonne méthode ?

7 votes

C'est exact, le ramasseur d'ordures peut ne pas libérer la mémoire immédiatement, vous pouvez également importer le fichier gc et appeler gc.collect() mais il ne peut pas récupérer la mémoire

0 votes

del df n'est pas appelé directement après la création de df, n'est-ce pas ? Je pense qu'il y a des références au df au moment où vous supprimez le df. Donc il ne sera pas supprimé mais le nom sera supprimé.

6 votes

La question de savoir si la mémoire récupérée par le ramasseur de déchets est effectivement rendue au système d'exploitation dépend de l'implémentation ; la seule garantie que donne le ramasseur de déchets est que la mémoire récupérée peut être utilisée par le processus Python actuel pour d'autres choses au lieu de demander, voire de plus de la mémoire de l'OS.

2voto

Anil P Points 1

Voici ce que je fais pour gérer ce problème.

J'ai une petite application qui lit de grands ensembles de données dans un cadre de données pandas et le sert comme une API. Les utilisateurs peuvent ensuite interroger le cadre de données en passant des paramètres d'interrogation dans l'API. Lorsque l'utilisateur a lu plusieurs ensembles de données, l'application est évidemment confrontée à des limites d'utilisation de la mémoire.

Au lieu de lire les ensembles de données dans des variables de cadres de données individuelles, lisez-les dans un dictionnaire de cadres de données.

df_file_contents[file_name] = pd.read_csv(..)

Une api a été fournie au front-end pour effacer le dictionnaire. Ceci appelle la méthode clear() du dictionnaire. Cette méthode peut être personnalisée pour être appelée lorsque sys.getsizeof(df_file_contents) atteint une certaine taille ou peut être utilisée pour supprimer certaines clés.

df_file_contents.clear()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X