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!