HOWTO · Pandas
Funktion auf jede Zeile im Pandas DataFrame anwenden
Dieses Tutorial zeigt, wie Sie die Pandas-Apply-Funktion auf jede Zeile in DataFrame verwenden und wie Sie verschiedene Funktionen als Argument anwenden, z. B. die Lambda-, NumPy- und benutzerdefinierten Funktionen auf jede Zeile.
Auf dieser Seite
Mit DataFrame.apply() und axis=1 wird jede Zeile an eine aufrufbare Funktion übergeben. Die Funktion kann eine umgewandelte Zeile zurückgeben, die apply() zu einem DataFrame zusammenfasst. Diese Anleitung erläutert die Auswahl der Zeilenachse sowie Beispiele mit lambda, einer NumPy-Funktion und benutzerdefinierten Funktionen mit und ohne zusätzliche Argumente.
Grundlegende Syntax der Pandas-Funktion apply()
Die allgemeine Form lautet dataframe.apply(function, axis=1, args=()). Setzen Sie axis=1, wenn die aufrufbare Funktion Zeilen erhalten soll. Standardmäßig gilt axis=0; damit werden stattdessen Spalten übergeben. Bei einem zeilenweisen Aufruf erhält die Funktion eine Series, deren Index die Spaltenbezeichnungen enthält. Der Rückgabewert bestimmt das Ergebnis: Gibt die Funktion für jede Zeile einen Skalar zurück, entsteht eine Series. Gibt sie eine Series mit einheitlichen Bezeichnungen zurück, entsteht ein DataFrame.
Mit args übergeben Sie nach der Zeile zusätzliche Positionsargumente. Verwenden Sie den Parameter, wenn eine benutzerdefinierte Funktion einen Wert benötigt, der für alle Zeilen gleich ist. Die vollständige Parameterreferenz finden Sie unter DataFrame.apply().
Eine lambda-Funktion auf jede Zeile eines Pandas-DataFrame anwenden
Eine lambda-Funktion eignet sich für eine kurze Umwandlung. Dieses Beispiel addiert 10 zu jedem Wert der Zeile und gibt einen DataFrame mit denselben Spalten zurück. Bei längerer Logik ist eine benannte Funktion leichter zu lesen und wiederzuverwenden.
Führen Sie dieses Beispiel aus. Der Code- und Ausgabeblock bleibt unverändert; darin enthaltene Beschriftungen sind daher weiterhin Englisch:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import pandas as pd
dataframe = pd.DataFrame([(1, 34, 23), (11, 31, 11)], columns=list("ABC"))
result = dataframe.apply(lambda row: row + 10, axis=1)
print(result)
A B C
0 11 44 33
1 21 41 21
Eine NumPy-Funktion auf jede Zeile eines Pandas-DataFrame anwenden
Übergeben Sie eine NumPy-Funktion direkt, wenn sie auf jeden Wert der Zeile angewendet werden soll. Hier wandelt np.sqrt jede numerische Zelle um, und apply() setzt die umgewandelten Zeilen zusammen. Die Quadratwurzel eignet sich für nichtnegative numerische Werte. Bei anderen Datentypen oder fachlichen Anforderungen sollten Sie eine andere Operation wählen.
Führen Sie dieses Beispiel aus. Der Code- und Ausgabeblock bleibt unverändert; darin enthaltene Beschriftungen sind daher weiterhin Englisch:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import numpy as np
import pandas as pd
dataframe = pd.DataFrame([(4, 9, 16), (25, 36, 49)], columns=list("ABC"))
result = dataframe.apply(np.sqrt, axis=1)
print(result)
A B C
0 2.0 3.0 4.0
1 5.0 6.0 7.0
Eine benutzerdefinierte Funktion mit Argumenten auf jede Zeile eines Pandas-DataFrame anwenden
Definieren Sie die Zeilenumwandlung als Funktion, wenn sie mehr als einen kurzen Ausdruck umfasst. Im Beispiel ist row das erste Argument; 2 wird über args danach übergeben. Die Funktion verdoppelt jeden Wert. args muss ein Tupel von Positionsargumenten sein. Ein einzelner zusätzlicher Wert wird deshalb als (2,) notiert.
Führen Sie dieses Beispiel aus. Der Code- und Ausgabeblock bleibt unverändert; darin enthaltene Beschriftungen sind daher weiterhin Englisch:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import pandas as pd
def multiply_row(row, factor):
return row * factor
dataframe = pd.DataFrame([(2, 3, 4), (3, 5, 10)], columns=list("ABC"))
result = dataframe.apply(multiply_row, axis=1, args=(2,))
print(result)
A B C
0 4 6 8
1 6 10 20
Eine benutzerdefinierte Funktion ohne Argumente auf jede Zeile eines Pandas-DataFrame anwenden
Wenn die Operation keinen gemeinsamen Parameter benötigt, definieren Sie die aufrufbare Funktion nur mit dem Zeilenparameter und übergeben Sie sie direkt. Dieses Beispiel multipliziert jeden Wert der Zeile mit vier. Die zurückgegebenen Zeilen behalten ihre Bezeichnungen; das Ergebnis ist daher ein DataFrame mit den ursprünglichen Spalten.
Führen Sie dieses Beispiel aus. Der Code- und Ausgabeblock bleibt unverändert; darin enthaltene Beschriftungen sind daher weiterhin Englisch:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import pandas as pd
def multiply_by_four(row):
return row * 4
dataframe = pd.DataFrame([(2, 3, 4), (3, 5, 10)], columns=list("ABC"))
result = dataframe.apply(multiply_by_four, axis=1)
print(result)
A B C
0 8 12 16
1 12 20 40
Verwenden Sie apply(), wenn die Operation eine Funktion benötigt, die mit einer ganzen Zeile arbeitet. Bei einer einfachen spaltenweisen Rechenoperation kann ein direkter vektorisierter Ausdruck übersichtlicher sein und Aufrufe von Python für jede einzelne Zeile vermeiden.