Pourquoi np.vectorize() est-il plus rapide que df.apply() pour la création de colonnes Pandas ?

Susan Sarandon
Libérer: 2024-10-27 04:34:30
original
846 Les gens l'ont consulté

  Why is np.vectorize() Faster than df.apply() for Pandas Column Creation?

Comparaison des performances de Pandas apply vs np.vectorize

Il a été observé que np.vectorize() peut être nettement plus rapide que df. apply() lors de la création d'une nouvelle colonne basée sur des colonnes existantes dans un Pandas DataFrame. La différence de performances observée provient des mécanismes sous-jacents employés par ces deux méthodes.

df.apply() vs Python-Level Loops

df.apply() crée essentiellement une boucle de niveau Python qui parcourt chaque ligne du DataFrame. Comme le démontrent les tests fournis, les boucles au niveau Python telles que les compréhensions de listes et les cartes sont toutes relativement lentes par rapport aux véritables calculs vectorisés.

np.vectorize() vs df.apply()

np.vectorize() convertit une fonction définie par l'utilisateur en fonction universelle (ufunc). Les Ufuncs sont hautement optimisés et peuvent effectuer des opérations par éléments sur les tableaux NumPy, en tirant parti du code basé sur C et d'algorithmes optimisés. Cela contraste avec df.apply(), qui fonctionne sur les objets de la série Pandas et entraîne une surcharge supplémentaire.

Véritable vectorisation : performances optimales

Pour une création de colonnes vraiment efficace , les calculs vectorisés dans NumPy sont fortement recommandés. Les opérations comme numpy.where et la division directe par élément avec df["A"] / df["B"] sont extrêmement rapides et évitent les frais généraux associés aux boucles.

Optimisation Numba

Pour encore plus d'efficacité, il est possible d'optimiser davantage les boucles grâce à Numba, un compilateur qui traduit les fonctions Python en code C optimisé. Numba peut réduire le temps d'exécution à quelques microsecondes, surpassant considérablement df.apply() et np.vectorize().

Conclusion

Alors que np.vectorize() peut offrir une certaine amélioration par rapport à df.apply(), ce n'est pas un véritable substitut aux calculs vectorisés dans NumPy. Pour obtenir des performances maximales, utilisez l'optimisation Numba ou des opérations vectorisées directes dans NumPy pour la création de nouvelles colonnes dans Pandas DataFrames.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!