Ich habe einige Probleme mit der Pandas-Apply-Funktion, wenn mehrere Spalten mit dem folgenden Datenrahmen verwendet werden
df = DataFrame ({'a' : np.random.randn(6),
'b' : ['foo', 'bar'] * 3,
'c' : np.random.randn(6)})
und die folgende Funktion
def my_test(a, b):
return a % b
Wenn ich versuche, diese Funktion anzuwenden mit:
df['Value'] = df.apply(lambda row: my_test(row[a], row[c]), axis=1)
Ich erhalte die Fehlermeldung:
NameError: ("global name 'a' is not defined", u'occurred at index 0')
Ich verstehe diese Nachricht nicht, ich habe den Namen richtig definiert.
Ich würde mich über jede Hilfe zu diesem Thema sehr freuen
Aktualisieren
Danke für Ihre Hilfe. Ich habe in der Tat einige Syntaxfehler mit dem Code gemacht, der Index sollte '' gesetzt werden. Ich bekomme jedoch immer noch das gleiche Problem mit einer komplexeren Funktion wie:
def my_test(a):
cum_diff = 0
for ix in df.index():
cum_diff = cum_diff + (a - df['a'][ix])
return cum_diff
my_test(a)
betrifft, weiß die Funktion nicht, was es df
ist, da sie nicht als Argument übergeben wurde (es df
sei denn, es handelt sich um eine globale Frage, was eine schreckliche Praxis wäre). Sie müssen alle Werte, die Sie innerhalb einer Funktion benötigen, als Argumente übergeben (vorzugsweise in der Reihenfolge). Wie sonst würde die Funktion sonst wissen, woher sie df
kommt? Es ist auch eine schlechte Praxis, in einem mit globalen Variablen übersäten Namespace zu programmieren. Sie werden solche Fehler nicht abfangen.
apply
so viel wie möglich zu verwenden. Wenn Sie nicht sicher sind, ob Sie es verwenden müssen, tun Sie es wahrscheinlich nicht. Ich empfehle einen Blick auf Wann sollte ich jemals pandas apply () in meinem Code verwenden wollen? .