Data Science

Effizientes Anwenden von Funktionen auf mehrere Pandas DataFrame-Spalten

Spread the love

Pandas ist eine leistungsstarke Python-Bibliothek zur Datenmanipulation und -analyse. Ein häufiges Bedürfnis ist die Anwendung derselben Funktion auf mehrere DataFrame-Spalten. Dieser Artikel beschreibt effiziente Methoden, um dies zu erreichen und eine wiederholte spaltenweise Verarbeitung zu vermeiden.

Inhaltsverzeichnis

Vektorisierte Operationen: Der schnellste Ansatz

Für numerische Operationen bieten die vektorisierten Funktionen von Pandas überragende Geschwindigkeit. Sie arbeiten direkt auf ganzen Spalten und nutzen die optimierte Array-Verarbeitung von NumPy. Dies ist deutlich schneller als iterative Methoden für große Datensätze.


import pandas as pd

data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)

# Spalten A und B elementweise addieren
df['Sum_AB'] = df['A'] + df['B']
print(df)

# Werte in Spalte A quadrieren
df['A_Squared'] = df['A']**2
print(df)

Die apply()-Methode: Zeilenweise Operationen

Die apply()-Methode ist vielseitig einsetzbar, um Funktionen zeilenweise (axis=1) oder spaltenweise (axis=0) anzuwenden. Dies ist ideal, wenn Ihre Funktion Zugriff auf mehrere Spalten innerhalb jeder Zeile benötigt.


# Funktion zur Berechnung des Produkts der Spalten A und B
def multiply_ab(row):
  return row['A'] * row['B']

df['Product_AB'] = df.apply(multiply_ab, axis=1)
print(df)

applymap(): Elementweise Transformationen

applymap() wendet eine Funktion auf jedes einzelne Element eines DataFrames (oder ausgewählter Spalten) an. Es ist effizient für einfache, elementweise Transformationen.


# Anwendung einer benutzerdefinierten Funktion auf Elemente in den Spalten 'A' und 'C'
def custom_function(x):
    if x > 5:
        return x * 2
    else:
        return x

df[['A', 'C']] = df[['A', 'C']].applymap(custom_function)
print(df)

Lambda-Funktionen für Prägnanz

Lambda-Funktionen bieten eine kompakte Möglichkeit, einfache, anonyme Funktionen inline zu definieren und verbessern die Lesbarkeit, wenn sie mit apply() oder anderen Methoden verwendet werden.


# Verwendung einer Lambda-Funktion mit apply für Prägnanz
df['Sum_AB_Lambda'] = df.apply(lambda row: row['A'] + row['B'], axis=1)
print(df)

Handhabung verschiedener Datentypen

Bei der Arbeit mit mehreren Spalten sollten Variationen in den Datentypen berücksichtigt werden. Robuste Funktionen sollten Fehlerbehandlung (z. B. try-except-Blöcke) enthalten, um mögliche Typinkonsistenzen zu verwalten und unerwartete Fehler zu vermeiden.

Die richtige Methode auswählen

Der optimale Ansatz hängt von der Komplexität Ihrer Funktion und der Größe des Datensatzes ab:

  • Vektorisierte Operationen: Am schnellsten für einfache numerische Operationen auf mehreren Spalten.
  • applymap(): Effizient für elementweise Operationen auf einzelnen Zellen über mehrere Spalten hinweg.
  • apply() (mit axis=1 oder axis=0): Flexibel für zeilenweise oder spaltenweise Operationen, die Zugriff auf mehrere Spalten benötigen. Kann bei sehr großen DataFrames langsamer sein.
  • Lambda-Funktionen: Verbessern die Lesbarkeit des Codes für einfache Funktionen innerhalb von apply() oder anderen Methoden.

Priorisieren Sie wann immer möglich vektorisierte Operationen für optimale Leistung. Das Verständnis dieser Techniken ermöglicht eine effiziente Datenmanipulation in Pandas.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert