Warum ist np.vectorize() bei der Pandas-Spaltenerstellung schneller als df.apply()?

Susan Sarandon
Freigeben: 2024-10-27 04:34:30
Original
846 Leute haben es durchsucht

  Why is np.vectorize() Faster than df.apply() for Pandas Column Creation?

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 mit 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 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 verkürzen und übertrifft damit sowohl df.apply() als auch np.vectorize() deutlich.

Fazit

Während np.vectorize() dies bieten kann 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.

Das obige ist der detaillierte Inhalt vonWarum ist np.vectorize() bei der Pandas-Spaltenerstellung schneller als df.apply()?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!