La recherche de performance dans les applications python utilisant pandas/numpy bénéficie souvent de l'utilisation des méthodes implémentées par pandas/numpy autres que le code propre implémenté, comme par exemple par le biais de boucles. C'est peut-être une mauvaise introduction à la question que je me pose, mais dans la capture d'écran suivante (si je ne l'avais pas testée), je m'attendais à ce que les versions utilisant les méthodes de la série s'exécutent plus rapidement que les buildins python. Puisque ce n'est pas le cas, cela signifie que j'ai construit une fausse intuition sur cet exemple, mais je n'ai pas encore pu trouver la raison de cela. La question est donc de savoir pourquoi, dans ce cas, l'utilisation des builtins python a des performances plus élevées que les méthodes appliquées sur les séries (est-ce que je rate quelque chose d'autre ?) ?
Réponses
Trop de publicités?Pandas a ses propres fonctions qui sont chemin sont différentes des fonctions intégrées de Python, donc si vous appelez Series.max()
vous appelez en fait nanops._nanminmax()
qui est ajouté via le IndexOpsMixin
au lieu de builtins.max()
Chacun d'entre eux se comporte différemment, et a donc des temps d'exécution différents.
De même pour le reste des méthodes. Si vous êtes curieux, vérifiez le code source de Series
et les classes dont elle hérite pour connaître les différences exactes entre les fonctions intégrées et l'implémentation de Pandas.
Est-ce que j'ai manqué quelque chose d'autre ?
Vous avez supposé que vous obtiendrez toujours le même résultat, ce qui n'est pas vrai. Exemple montrant des résultats différents pour sum
y pandas.Series.sum
es
import pandas as pd
s = pd.Series([1.0,2.0,float("nan")])
print(s.sum())
print(sum(s))
sortie
3.0
nan