2 votes

Concaténation de dataframes pandas à partir de pickle vs. à partir d'un dictionnaire en mémoire - pourquoi l'échec en mémoire?

J'ai un dictionnaire de dataframes que je veux combiner. Idéalement, je voudrais faire cela en mémoire comme ceci :

values = ['A','B','C']
dats = [dataset[x] for x in values] # obtenir une liste de dataframes à partir du dictionnaire de dataframes "dataset" (provoque un plantage du noyau)
dataset_df = pd.concat(dats, sort=False, join='outer', ignore_index=True) # concaténer les ensembles de données

Cependant, cela provoque un plantage du noyau, donc je dois me résoudre à mettre en conserve le dictionnaire d'abord et à récupérer les dataframes un par un, ce qui est très gourmand en performances :

dats = [get_dataset(x) for x in values] # get_dataset() récupère un dataframe à partir du disque
dataset_df = pd.concat(dats, sort=False, join='outer', ignore_index=True) # concaténer les ensembles de données

Le jeu de données combiné tient en mémoire aux côtés du jeu de données individuel. J'ai confirmé cela en l'ajoutant au dictionnaire de dataframes par la suite. Alors pourquoi le plantage du noyau ?

Est-ce que mettre des dataframes d'un dictionnaire dans une liste entraîne une utilisation excessive de la mémoire ?

2voto

Oleg O Points 873

Vous pouvez passer une expression de générateur à concat, comme ceci :

dats = (dataset[x] for x in values)

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