Ich möchte eine Funktion mit Argumenten auf eine Reihe in Python-Pandas anwenden:
x = my_series.apply(my_function, more_arguments_1)
y = my_series.apply(my_function, more_arguments_2)
...
In der Dokumentation wird die Unterstützung einer Apply-Methode beschrieben, es werden jedoch keine Argumente akzeptiert. Gibt es eine andere Methode, die Argumente akzeptiert? Fehlt mir alternativ eine einfache Problemumgehung?
Update (Oktober 2017): Da diese Frage ursprünglich gestellt wurde, wurde Pandas apply()
aktualisiert, um Positions- und Schlüsselwortargumente zu verarbeiten. Der obige Dokumentationslink spiegelt dies nun wider und zeigt, wie beide Argumenttypen eingeschlossen werden können.
functools.partial
oderstarmap
?DataFrame.apply
Dokumente undSeries.apply
DokumenteAntworten:
Neuere Versionen von Pandas tun können Sie zusätzliche Argumente zu übergeben (siehe die neue Dokumentation ). Jetzt können Sie also Folgendes tun:
Die Positionsargumente werden nach dem Element der Reihe hinzugefügt .
Für ältere Versionen von Pandas:
Die Dokumentation erklärt dies deutlich. Die Methode apply akzeptiert eine Python-Funktion, die einen einzelnen Parameter haben sollte. Wenn Sie weitere Parameter übergeben möchten, sollten Sie diese verwenden,
functools.partial
wie von Joel Cornett in seinem Kommentar vorgeschlagen.Ein Beispiel:
Sie können Schlüsselwortargumente auch mit übergeben
partial
.Ein anderer Weg wäre, ein Lambda zu erstellen:
Aber ich denke, die Verwendung
partial
ist besser.quelle
args
Argument, bei dem es sich um ein Tupel handelt, das zusätzliche Positionsargumente oder ** kwds für benannte Argumente enthält. Ich habe ein Problem , das für Series.apply auch haben () github.com/pydata/pandas/issues/1829'abc'
,args=('abc')
wird es als drei Argumente ausgewertet('a', 'b', 'c')
. Um dies zu vermeiden, müssen Sie ein Tupel mit der Zeichenfolge übergeben und dazu ein nachfolgendes Komma einfügen:args=('abc',)
Schritte:
Beispiel
Das Ergebnis dieses Beispiels ist, dass jede Nummer im Datenrahmen zur Nummer 9 hinzugefügt wird.
Erläuterung:
Die Funktion "Hinzufügen" hat zwei Parameter: i1, i2. Der erste Parameter ist der Wert im Datenrahmen und der zweite ist alles, was wir an die Funktion "Apply" übergeben. In diesem Fall übergeben wir "9" mit dem Schlüsselwortargument "i2" an die Apply-Funktion.
quelle
quelle
func
. Also, wenn ich mich bewerben möchte,pd.Series.mean(axis=1)
wie gebe ich das einaxis=1
?Sie können eine beliebige Anzahl von Argumenten an die Funktion übergeben,
apply
die entweder über unbenannte Argumente, die als Tupel an denargs
Parameter übergeben werden, oder über andere Schlüsselwortargumente , die vom Parameter intern als Wörterbuch erfasst werden, aufgerufen wirdkwds
.Erstellen wir beispielsweise eine Funktion, die True für Werte zwischen 3 und 6 und andernfalls False zurückgibt.
Diese anonyme Funktion ist nicht sehr flexibel. Erstellen wir eine normale Funktion mit zwei Argumenten, um die Min- und Max-Werte zu steuern, die wir in unserer Serie haben möchten.
Wir können die Ausgabe der ersten Funktion replizieren, indem wir unbenannte Argumente an
args
folgende Adresse übergeben :Oder wir können die genannten Argumente verwenden
Oder sogar eine Kombination aus beiden
quelle