Heim  >  Artikel  >  Backend-Entwicklung  >  Pandas Apply vs. NumPy Vectorize: Was ist schneller zum Erstellen neuer Spalten?

Pandas Apply vs. NumPy Vectorize: Was ist schneller zum Erstellen neuer Spalten?

Linda Hamilton
Linda HamiltonOriginal
2024-10-27 08:28:31351Durchsuche

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

Leistung von Pandas Apply vs. NumPy Vectorize bei der Spaltenerstellung

Einführung

While Pandas ' df.apply() ist eine vielseitige Funktion für die Bearbeitung von Datenrahmen. Ihre Leistung kann insbesondere bei großen Datenmengen ein Problem darstellen. NumPys np.vectorize() bietet eine potenzielle Alternative zum Erstellen neuer Spalten als Funktion vorhandener Spalten. Dieser Artikel untersucht den Geschwindigkeitsunterschied zwischen den beiden Methoden und erklärt, warum np.vectorize() im Allgemeinen schneller ist.

Leistungsvergleich

Umfangreiches Benchmarking ergab, dass np.vectorize( ) hat df.apply() durchweg deutlich übertroffen. Beispielsweise war np.vectorize() in einem Datensatz mit 1 Million Zeilen auf einem MacBook Pro 2016 25-mal schneller. Diese Ungleichheit wird noch ausgeprägter, wenn die Größe des Datensatzes zunimmt.

Zugrunde liegende Mechanismen

df.apply() arbeitet durch eine Reihe von Schleifen auf Python-Ebene, was erhebliche Auswirkungen mit sich bringt Overhead. Bei jeder Iteration wird ein neues Pandas-Serienobjekt erstellt, die Funktion aufgerufen und die Ergebnisse an eine neue Spalte angehängt. Im Gegensatz dazu nutzt np.vectorize() die Broadcasting-Regeln von NumPy, um die Funktion auf Arrays auszuwerten. Dieser Ansatz umgeht den Overhead von Python-Schleifen und nutzt optimierten C-Code, was zu einer viel schnelleren Ausführung führt.

Echte Vektorisierung

Für echte vektorisierte Berechnungen gilt weder df.apply () noch np.vectorize() ist optimal. Stattdessen bieten native NumPy-Operationen eine überlegene Leistung. Vectorized Divide() zeigt beispielsweise einen dramatischen Leistungsvorteil gegenüber df.apply() oder np.vectorize().

JIT-Kompilierung mit Numba

Für Für noch mehr Effizienz kann der @njit-Dekorator von Numba verwendet werden, um die Funktion „divide()“ in effizienten C-Level-Code zu kompilieren. Dieser Ansatz verkürzt die Ausführungszeit weiter und liefert Ergebnisse in Mikrosekunden statt in Sekunden.

Fazit

Während df.apply() eine praktische Schnittstelle zum Anwenden von Funktionen auf Datenrahmen bietet, Die Leistungseinschränkungen werden bei großen Datensätzen deutlich. Für leistungskritische Anwendungen bieten np.vectorize() von NumPy und sein JIT-kompiliertes Gegenstück in Numba eine überlegene Geschwindigkeit beim Erstellen neuer Spalten. Es ist auch erwähnenswert, dass echte vektorisierte Operationen mit nativen NumPy-Funktionen die effizienteste Option für die Manipulation großer Datenmengen sind.

Das obige ist der detaillierte Inhalt vonPandas Apply vs. NumPy Vectorize: Was ist schneller zum Erstellen neuer Spalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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