ich einen Datenrahmen haben (in Python 2.7, Pandas 0.15.0):Python Pandas gelten Funktion, wenn ein Spaltenwert nicht NULL ist
df=
A B C
0 NaN 11 NaN
1 two NaN ['foo', 'bar']
2 three 33 NaN
ich eine einfache Funktion für die Zeilen anwenden möchten, die nicht NULL enthält Werte in einer bestimmten Spalte. Meine Funktion ist so einfach wie möglich:
def my_func(row):
print row
Und mein anwenden-Code ist der folgende:
df[['A','B']].apply(lambda x: my_func(x) if(pd.notnull(x[0])) else x, axis = 1)
Es funktioniert perfekt. Wenn ich die Spalte 'B' für NULL-Werte überprüfen möchte, funktioniert die pd.notnull()
auch perfekt. Aber wenn ich Spalte ‚C‘ auswählen, die enthält eine Liste Objekte:
df[['A','C']].apply(lambda x: my_func(x) if(pd.notnull(x[1])) else x, axis = 1)
dann bekomme ich folgende Fehlermeldung: 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')
Weiß jemand, warum pd.notnull()
funktioniert nur für Integer- und String-Spalten, aber nicht für ‚-Liste Säulen'?
Und gibt es eine schönere Art und Weise für NULL-Werte in Spalte ‚C‘ statt dies zu überprüfen:
df[['A','C']].apply(lambda x: my_func(x) if(str(x[1]) != 'nan') else x, axis = 1)
Vielen Dank!
Beachten Sie, dass 'np.all ([True, True])' 'True' zurückgibt. Ich denke, das wird für das OP funktionieren. –
@PaulH Danke. Ich habe es mit 'all' versucht, aber' np.all' vernachlässigt. Das Problem liegt nicht bei '[True, True]', sondern eher bei 'False'. Während 'all (pd.notnull (None))' einen Fehler verursacht, 'np.all (pd.notnull (None))' nicht. – Korem
Danke, Korem, es funktioniert! Was ich mich wundere ist, dass eine einzelne 'pd.notnull (df ['C'])' mit 'False, True, False' zurückkehrt, aber nicht mit' False, [True, True], False'. – ragesz