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
Susan Sarandonoriginal
2024-11-13 05:46:02732parcourir

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)

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!

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