Maison > développement back-end > Tutoriel Python > Pourquoi l'utilisation de dictionnaires pour remplacer les valeurs dans la série Pandas est-elle lente et comment pouvez-vous améliorer les performances ?

Pourquoi l'utilisation de dictionnaires pour remplacer les valeurs dans la série Pandas est-elle lente et comment pouvez-vous améliorer les performances ?

Susan Sarandon
Libérer: 2024-11-13 05:46:02
original
721 Les gens l'ont consulté

Why is Using Dictionaries to Replace Values in Pandas Series Slow, and How Can You Improve Performance?

Amélioration des performances de remplacement des valeurs dans les séries Pandas à l'aide de dictionnaires

Le remplacement des valeurs dans une série Pandas à l'aide d'un dictionnaire est une tâche courante. Bien que le remplacement des valeurs à l'aide de s.replace(d) soit recommandé, cela peut être beaucoup plus lent que l'utilisation d'une simple compréhension de liste.

Causes de la lenteur des performances

La lenteur des performances de s.replace(d) découle de sa gestion des cas extrêmes et des situations rares. Cela implique :

  • Convertir le dictionnaire en liste.
  • Parcourir la liste et vérifier les dictionnaires imbriqués.
  • Alimenter un itérateur de clés et de valeurs dans un remplacer la fonction.

Méthodes alternatives

Pour améliorer les performances, pensez à utiliser les méthodes suivantes :

  • Carte complète : Utilisez s.map(d) si toutes les valeurs de la série sont mappées par le dictionnaire. Cette méthode est efficace et systématiquement plus rapide.
  • Carte partielle : Si seule une petite partie (par exemple, moins de 5 %) des valeurs est mappée par le dictionnaire, utilisez s.map(d ).fillna(s['A']).astype(int). Cette approche combine le mappage et le remplissage, évitant ainsi le besoin d'itérations coûteuses.

Benchmarking

Les benchmarks démontrent la différence de performances entre s.replace(d), s .map(d) et compréhension de liste :

##### Full Map #####

d = {i: i+1 for i in range(1000)}

%timeit df['A'].replace(d)                          # Slow (1.98s)
%timeit df['A'].map(d)                              # Fast (84.3ms)

##### Partial Map #####

d = {i: i+1 for i in range(10)}

%timeit df['A'].replace(d)                          # Intermediate (20.1ms)
%timeit df['A'].map(d).fillna(df['A']).astype(int)  # Faster (111ms)
Copier après la connexion

Cela révèle que s.map(d) est systématiquement plus rapide que s.replace(d) pour les mappages complets ou partiels.

Conclusion

En fonction de l'exhaustivité de la couverture du dictionnaire, s.map(d) ou s.map(d).fillna(s['A']).astype(int) devrait être préféré à s.replace(d) pour un remplacement efficace de la valeur dans la série Pandas.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal