Ho un dataframe (in Python 2.7, panda 0.15.0):Python panda funzione si applicano se un valore di colonna non è NULL
df=
A B C
0 NaN 11 NaN
1 two NaN ['foo', 'bar']
2 three 33 NaN
voglio applicare una semplice funzione per le righe che non contengono NULL valori in una colonna specifica. La mia funzione è il più semplice possibile:
def my_func(row):
print row
E il mio codice applicare è la seguente:
df[['A','B']].apply(lambda x: my_func(x) if(pd.notnull(x[0])) else x, axis = 1)
Funziona perfettamente. Se voglio controllare la colonna "B" per i valori NULL, anche lo pd.notnull()
funziona perfettamente. Ma se seleziono colonna 'C' che contiene gli oggetti della lista:
df[['A','C']].apply(lambda x: my_func(x) if(pd.notnull(x[1])) else x, axis = 1)
allora ottengo il seguente messaggio di errore: ValueError: ('The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()', u'occurred at index 1')
Qualcuno sa perché pd.notnull()
funziona solo per interi e stringhe colonne, ma non per 'lista colonne?
E c'è un modo più bello per verificare la presenza di valori NULL nella colonna 'C' al posto di questo:
df[['A','C']].apply(lambda x: my_func(x) if(str(x[1]) != 'nan') else x, axis = 1)
Grazie!
nota che 'np.all ([True, True])' restituirà 'True'. Penso che funzionerà per l'OP. –
@PaulH Grazie. Ho provato con 'all' ma ho trascurato' np.all'. Il problema non è con '[True, True]', ma piuttosto con 'False'. Mentre 'all (pd.notnull (None))' genera un errore, 'np.all (pd.notnull (None))' no. – Korem
Grazie Korem, funziona! Quello che mi chiedo è che un singolo 'pd.notnull (df ['C'])' ritorni con 'False, True, False' ma non con' False, [True, True], False'. – ragesz