Leistungsvergleich von Pandas apply vs. np.vectorize
Es wurde beobachtet, dass np.vectorize() deutlich schneller als df sein kann. apply() beim Erstellen einer neuen Spalte basierend auf vorhandenen Spalten in einem Pandas DataFrame. Der beobachtete Leistungsunterschied ergibt sich aus den zugrunde liegenden Mechanismen, die von diesen beiden Methoden verwendet werden.
df.apply() vs. Schleifen auf Python-Ebene
df.apply() erstellt im Wesentlichen eine Schleife auf Python-Ebene, die jede Zeile des DataFrame durchläuft. Wie in den bereitgestellten Benchmarks gezeigt, sind Schleifen auf Python-Ebene wie Listenverständnisse und Karten im Vergleich zu echten vektorisierten Berechnungen alle relativ langsam.
np.vectorize() vs. df.apply()
np.vectorize() wandelt eine benutzerdefinierte Funktion in eine universelle Funktion (ufunc) um. Ufuncs sind hochoptimiert und können elementweise Operationen auf NumPy-Arrays ausführen und dabei C-basierten Code und optimierte Algorithmen nutzen. Dies steht im Gegensatz zu df.apply(), das auf Objekten der Pandas-Serie arbeitet und zusätzlichen Overhead verursacht.
Echte Vektorisierung: Optimale Leistung
Für eine wirklich effiziente Spaltenerstellung vektorisierte Berechnungen in NumPy werden dringend empfohlen. Operationen wie numpy.where und die direkte elementweise Division mit df["A"] / df["B"] sind extrem schnell und vermeiden den mit Schleifen verbundenen Overhead.
Numba-Optimierung
Für noch mehr Effizienz ist es möglich, Schleifen mit Numba weiter zu optimieren, einem Compiler, der Python-Funktionen in optimierten C-Code übersetzt. Numba kann die Ausführungszeit auf Mikrosekunden reduzieren und übertrifft damit sowohl df.apply() als auch np.vectorize() deutlich.
Fazit
Während np.vectorize() dies möglicherweise bietet Obwohl es eine gewisse Verbesserung gegenüber df.apply() darstellt, ist es kein echter Ersatz für vektorisierte Berechnungen in NumPy. Um maximale Leistung zu erzielen, nutzen Sie die Numba-Optimierung oder direkte vektorisierte Operationen in NumPy für die Erstellung neuer Spalten in Pandas DataFrames.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3