Maison  >  Article  >  développement back-end  >  Pourquoi np.vectorize() est-il plus rapide que df.apply() pour la création de colonnes Pandas ?

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

Susan Sarandon
Susan Sarandonoriginal
2024-10-27 04:34:30841parcourir

  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!

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