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 dfist, da sie nicht als Argument übergeben wurde (es dfsei 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 dfkommt? Es ist auch eine schlechte Praxis, in einem mit globalen Variablen übersäten Namespace zu programmieren. Sie werden solche Fehler nicht abfangen.
applyso 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? .