Ho alcuni problemi con la funzione di applicazione di Panda, quando utilizzo più colonne con il seguente frame di dati
df = DataFrame ({'a' : np.random.randn(6),
'b' : ['foo', 'bar'] * 3,
'c' : np.random.randn(6)})
e la seguente funzione
def my_test(a, b):
return a % b
Quando provo ad applicare questa funzione con:
df['Value'] = df.apply(lambda row: my_test(row[a], row[c]), axis=1)
Ricevo il messaggio di errore:
NameError: ("global name 'a' is not defined", u'occurred at index 0')
Non capisco questo messaggio, ho definito correttamente il nome.
Apprezzerei molto qualsiasi aiuto su questo problema
Aggiornare
Grazie per l'aiuto. Ho fatto davvero alcuni errori di sintassi con il codice, l'indice dovrebbe essere messo ''. Tuttavia ho ancora lo stesso problema usando una funzione più complessa come:
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)
non sa cosa df
sia dal momento che non è stata trasmessa come argomento (a meno che non df
si supponga che sia un globale, il che sarebbe una pratica terribile). È necessario passare tutti i valori necessari all'interno di una funzione come argomenti (preferibilmente in ordine), altrimenti in quale altro modo la funzione saprebbe da dove df
viene? Inoltre, è una cattiva pratica programmare in uno spazio dei nomi disseminato di variabili globali, non si colpiranno errori come questo.
apply
il più possibile. Se non sei sicuro di doverlo usare, probabilmente non lo fai. Consiglio di dare un'occhiata a Quando dovrei mai voler usare Panda Applica () nel mio codice? .