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 appelergc.collect()
mais il ne peut pas récupérer la mémoire0 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.
0 votes
J'appelle del df juste après la création. Je n'ai pas ajouté d'autres références à df. Tout ce que j'ai fait, c'est ouvrir ipython et exécuter ces trois lignes de code. Si j'exécute le même code sur un autre objet qui prend beaucoup de mémoire, comme par exemple un tableau numpy, del nparray fonctionne parfaitement.
3 votes
@b10hazard : Que diriez-vous de quelque chose comme
df = ''
à la fin de votre code ? Il semble que cela efface la mémoire vive utilisée par le cadre de données.0 votes
df = ''
fonctionne pour moi