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. Ceci 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. Des 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 à l'aide de 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.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3