Vektorisieren Sie eine Funktion in Pandas

Vektorisierung ist eine Möglichkeit, eine Funktion in eine Form umzuwandeln, die sie effizienter auswertet. Es beschleunigt die Datenverarbeitung in Python, indem es sie in Arrays umwandelt. Es beschleunigt den Python-Code, ohne eine Schleife zu verwenden.
Die Pandas-Bibliothek ist ein beliebtes Tool in Python zur Datenanalyse und -manipulation. Wir verwenden die Vektorisierung in Pandas häufig in der numerischen Berechnung, um die Codeleistung zu verbessern.
Ein Pandas-Datenrahmen ist eine Datenstruktur, die auf einem Datenrahmen aufbaut und die Funktionalität sowohl von R-Datenrahmen als auch von Python-Wörterbüchern bereitstellt. Es ist wie ein Python-Wörterbuch, aber mit allen Datenanalyse- und -manipulationsfunktionen, wie Excel-Tabellen und Datenbanken mit Zeilen und Spalten.
Vektorisieren Sie eine Funktion in Pandas
Lassen Sie uns die Python-Bibliothek pandas
installieren, um Datenrahmen zu importieren.
PS C:\> pip install pandas
Um eine Vektorisierung auf einem Datenrahmen durchzuführen, importieren wir ihn mit der Python-Bibliothek pandas
. Lassen Sie uns den folgenden Code ausführen, um einen Datenrahmen zu importieren und ihn durch Verkettung groß zu machen.
Beispielcode (gespeichert in demo.py
):
import pandas as pd
small_df = pd.read_csv("Salaries.csv")
df = pd.concat([small_df] * 100, ignore_index=True)
Führen Sie nun den folgenden Code aus, um die Gesamtzahl der Zeilen des Datenrahmens für die Datenanalyse zu berechnen.
Beispielcode (gespeichert in demo.py
):
print(f"No of rows: {len(df)}")
AUSGABE (gedruckt auf der Konsole):
No of rows: 14865400
Sehen wir uns die Verbrauchszeit einer Operation an, die für den Datenrahmen ohne Vektorisierung ausgeführt wird, indem Sie den folgenden Code ausführen.
Beispielcode (gespeichert in demo.py
):
import time
import numpy
start_time = time.process_time()
pay_with_tax = np.zeros(len(df))
for idx, pay in enumerate(df.TotalPay.values):
pay_with_tax[idx] = pay * 1.05 + 1
end_time = time.process_time()
print("Without using Vectorization")
print(f"pay_with_tax = {pay_with_tax}")
print(f"Computation time = {(1000*(end_time - start_time ))}ms")
Die Funktion np.zeros()
nimmt die Größe als len(df)
und erstellt ein Array aus Nullen der angegebenen Größe. Die Schleife for
durchläuft sowohl das Array pay_with_tax
als auch die Spalte TotalPay
der Daten Rahmen als Bezahlung
.
Es berechnet die Steuer für jede Zahlung
und speichert sie in Zahlung_mit_Steuer
.
AUSGABE (gedruckt auf der Konsole):
Die Vektorisierung erhöht die Flexibilität der Operationen unter Verwendung von SIMD-Ansätzen (Single Instruction Multiple Data). In Pandas beschleunigt eine Batch-API die Operationen, ohne Schleifen zu verwenden.
Lassen Sie uns den unten angegebenen Code ausführen, der die Vektorisierung verwendet, um den Zeitverbrauch bei der Berechnung von salary_with_tax
zu berechnen.
Beispielcode (gespeichert in demo.py
):
start_time = time.process_time()
pay_with_tax = df.TotalPay.values * 1.05 + 1
end_time = time.process_time()
print("Using Vectorization")
print(f"pay_with_tax = {pay_with_tax}")
print(f"Computation time = {(1000*(end_time - start_time ))}ms")
AUSGABE (gedruckt auf der Konsole):
Sie können auch statistische Operationen der Bibliothek numpy
wie mean
, sqrt
usw. anwenden, indem Sie kleine Änderungen am obigen Code vornehmen.
Beispielcode (gespeichert in demo.py
):
import numpy as np
# non vectorized
for idx, pay in enumerate(df.TotalPay.values):
pay_with_tax[idx] = np.mean(pay)
# vectorized
pay_with_tax = df["TotalPay"].apply(np.mean)
Sie können den Unterschied im Zeitverbrauch sehen, sowohl mit als auch ohne Vektorisierung. Branchen arbeiten mit Millionen bis Billionen von Big Data-Zeilen.
Die Berechnung dieser Daten mit einem nicht vektorisierten Ansatz ist zeitaufwändig. Daher hilft die flexible Art der Vektorisierung in Pandas-Datenrahmen bei der schnellen Datenanalyse und -manipulation.
Verwandter Artikel - Pandas DataFrame
- Wie man Pandas DataFrame-Spaltenüberschriften als Liste erhält
- Pandas DataFrame-Spalte löschen
- Wie man DataFrame-Spalte in Datetime in Pandas konvertiert
- Wie konvertiert man eine Fließkommazahl in eine Ganzzahl in Pandas DataFrame
- Wie man Pandas-DataFrame nach den Werten einer Spalte sortiert
- Wie erhält man das Aggregat der Pandas gruppenweise und sum