Vektorisieren Sie eine Funktion in Pandas

Hira Arif 15 Februar 2024
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):

vektorisieren Sie eine Funktion in Pandas - nicht vektorisiert

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

vektorisieren Sie eine Funktion in Pandas - vektorisiert

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