Mam pewne problemy z funkcją stosowania Pand, gdy używam wielu kolumn z następującą ramką danych
df = DataFrame ({'a' : np.random.randn(6),
'b' : ['foo', 'bar'] * 3,
'c' : np.random.randn(6)})
i następująca funkcja
def my_test(a, b):
return a % b
Kiedy próbuję zastosować tę funkcję do:
df['Value'] = df.apply(lambda row: my_test(row[a], row[c]), axis=1)
Pojawia się komunikat o błędzie:
NameError: ("global name 'a' is not defined", u'occurred at index 0')
Nie rozumiem tej wiadomości, poprawnie zdefiniowałem nazwę.
Byłbym bardzo wdzięczny za wszelką pomoc w tej sprawie
Aktualizacja
Dzięki za pomoc. Naprawdę popełniłem kilka błędów składniowych w kodzie, indeks powinien zostać wstawiony ''. Jednak nadal pojawia się ten sam problem przy użyciu bardziej złożonej funkcji, takiej jak:
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)
nie wie, co df
jest, ponieważ nie została przekazana jako argument (chyba że df
ma być globalny, co byłoby okropną praktyką). Musisz przekazać wszystkie potrzebne wartości jako argumenty (najlepiej w kolejności), w przeciwnym razie skąd funkcja wiedziałaby, skąd df
pochodzi? Poza tym programowanie w przestrzeni nazw zaśmieconej zmiennymi globalnymi jest złą praktyką, nie złapie się takich błędów.
apply
jak najwięcej. Jeśli nie jesteś pewien, czy musisz go użyć, prawdopodobnie nie. Polecam rzucić okiem Kiedy powinienem kiedykolwiek chcieć używać pand Apply () w moim kodzie? .