Mam dataframe (w Pythonie 2.7, pandy 0.15.0):Python pandy funkcję stosuje się, jeżeli wartość kolumna nie jest NULL
df=
A B C
0 NaN 11 NaN
1 two NaN ['foo', 'bar']
2 three 33 NaN
Chcę zastosować prostą funkcję do wierszy, które nie zawierają NULL wartości w określonej kolumnie. Moja funkcja jest tak proste, jak to możliwe:
def my_func(row):
print row
A moja zastosować kod jest następujący:
df[['A','B']].apply(lambda x: my_func(x) if(pd.notnull(x[0])) else x, axis = 1)
To działa doskonale. Jeśli chcę sprawdzić kolumnę "B" dla wartości NULL, działa również doskonale pd.notnull()
. Ale jeśli mam wybierać kolumny „C”, która zawiera lista obiektów:
df[['A','C']].apply(lambda x: my_func(x) if(pd.notnull(x[1])) else x, axis = 1)
następnie pojawia się następujący komunikat o błędzie: 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')
Czy ktoś wie dlaczego pd.notnull()
działa tylko dla liczb całkowitych i ciągów kolumn, ale nie dla „listy kolumny "?
I tam jest ładniejszy sposób sprawdzić dla wartości NULL w kolumnie „C” zamiast tego:
df[['A','C']].apply(lambda x: my_func(x) if(str(x[1]) != 'nan') else x, axis = 1)
Dziękujemy!
Zauważ, że 'np.all ([True, True])' zwróci 'True'. Myślę, że to zadziała w OP. –
@PaulH Dzięki. Próbowałem z 'all', ale zaniedbałem' np.all'. Problem nie dotyczy '[True, True]', ale raczej z 'False'. Podczas gdy 'all (pd.notnull (None)) podnosi błąd,' np.all (pd.notnull (None)) 'nie. – Korem
Dziękuję Korem, to działa! Zastanawiam się, że pojedynczy 'pd.notnull (df ['C'])) powraca z' False, True, False', ale nie z 'False, [True, True], False'. – ragesz