Maison  >  Article  >  développement back-end  >  Pandas Apply vs NumPy Vectorize : lequel est le plus rapide pour créer de nouvelles colonnes ?

Pandas Apply vs NumPy Vectorize : lequel est le plus rapide pour créer de nouvelles colonnes ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-27 08:28:31351parcourir

  Pandas Apply vs. NumPy Vectorize: Which is Faster for Creating New Columns?

Performances de Pandas Apply par rapport à NumPy Vectorize dans la création de colonnes

Introduction

Pendant que Pandas ' df.apply() est une fonction polyvalente pour opérer sur des dataframes, ses performances peuvent être préoccupantes, en particulier pour les grands ensembles de données. np.vectorize() de NumPy offre une alternative potentielle pour créer de nouvelles colonnes en fonction de celles existantes. Cet article étudie la différence de vitesse entre les deux méthodes, expliquant pourquoi np.vectorize() est généralement plus rapide.

Comparaison des performances

Une analyse comparative approfondie a révélé que np.vectorize( ) a systématiquement surpassé df.apply() par une marge significative. Par exemple, dans un ensemble de données comportant 1 million de lignes, np.vectorize() était 25 fois plus rapide sur un MacBook Pro 2016. Cette disparité devient encore plus prononcée à mesure que la taille de l'ensemble de données augmente.

Mécanismes sous-jacents

df.apply() fonctionne via une série de boucles au niveau Python, ce qui introduit des aérien. Chaque itération implique la création d'un nouvel objet Pandas Series, l'appel de la fonction et l'ajout des résultats à une nouvelle colonne. En revanche, np.vectorize() utilise les règles de diffusion de NumPy pour évaluer la fonction sur les tableaux. Cette approche contourne la surcharge des boucles Python et capitalise sur du code C optimisé, ce qui entraîne une exécution beaucoup plus rapide.

Véritable vectorisation

Pour de véritables calculs vectorisés, ni df.apply () ni np.vectorize() ne sont optimaux. Au lieu de cela, les opérations NumPy natives offrent des performances supérieures. Vectorized Divide(), par exemple, présente un avantage considérable en termes de performances par rapport à df.apply() ou np.vectorize().

Compilation JIT avec Numba

Pour Pour une efficacité encore plus grande, le décorateur @njit de Numba peut être utilisé pour compiler la fonction Divide() en un code efficace de niveau C. Cette approche réduit encore le temps d'exécution, produisant des résultats en microsecondes plutôt qu'en secondes.

Conclusion

Bien que df.apply() fournisse une interface pratique pour appliquer des fonctions aux dataframes, ses limites de performances deviennent évidentes avec de grands ensembles de données. Pour les applications critiques en termes de performances, np.vectorize() de NumPy et son homologue compilé JIT dans Numba offrent une vitesse supérieure pour créer de nouvelles colonnes. Il convient également de noter que les véritables opérations vectorisées utilisant les fonctions natives de NumPy sont l'option la plus efficace pour la manipulation de données à grande échelle.

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