Maison >développement back-end >Tutoriel Python >Pourquoi la concaténation de nombreux DataFrames Pandas est-elle exponentiellement lente et comment puis-je l'éviter ?

Pourquoi la concaténation de nombreux DataFrames Pandas est-elle exponentiellement lente et comment puis-je l'éviter ?

DDD
DDDoriginal
2024-12-20 03:38:13811parcourir

Why is Concatenating Many Pandas DataFrames Exponentially Slow, and How Can I Avoid It?

Concaténation exponentiellement lente des DataFrames

Lorsque vous travaillez avec de grands ensembles de données, il est courant de partitionner les données en morceaux plus petits pour un traitement efficace. Cependant, la concaténation de ces morceaux peut devenir exponentiellement plus lente à mesure que le nombre de morceaux augmente.

Cause du ralentissement

Le ralentissement est attribué à la façon dont pd.concat() est mise en œuvre. Lorsqu'il est appelé dans une boucle, il crée un nouveau DataFrame pour chaque concaténation, ce qui entraîne une copie substantielle des données. Ce coût de copie augmente quadratiquement avec le nombre d'itérations, conduisant à l'augmentation exponentielle observée du temps de traitement.

Éviter le ralentissement

Pour contourner ce goulot d'étranglement des performances, il est crucial pour éviter d'appeler pd.concat() dans une boucle for. Au lieu de cela, stockez les morceaux dans une liste et concaténez-les tous en même temps après le traitement :

super_x = []
for i, df_chunk in enumerate(df_list):
    [x, y] = preprocess_data(df_chunk)
    super_x.append(x)
super_x = pd.concat(super_x, axis=0)

Grâce à cette approche, la copie n'a lieu qu'une seule fois, ce qui réduit considérablement le temps de traitement global.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn