我有一個數據框(在Python 2.7,熊貓0.15.0):Python的大熊貓應用功能,如果一個列值不爲空
df=
A B C
0 NaN 11 NaN
1 two NaN ['foo', 'bar']
2 three 33 NaN
我想申請一個簡單的函數,該函數不包含空行特定列中的值。我的作用是儘可能簡單:
def my_func(row):
print row
我的申請代碼如下:
df[['A','B']].apply(lambda x: my_func(x) if(pd.notnull(x[0])) else x, axis = 1)
它完美。如果我想檢查'B'列的空值,那麼pd.notnull()
也可以很好地工作。但是,如果我選擇列「C」,其中包含列表對象:
df[['A','C']].apply(lambda x: my_func(x) if(pd.notnull(x[1])) else x, axis = 1)
然後我收到以下錯誤信息: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')
有誰知道爲什麼pd.notnull()
僅適用於整數和字符串列,但不是名單列'?
,並有一個更好的方式在列「C」檢查NULL值,而不是這樣的:
df[['A','C']].apply(lambda x: my_func(x) if(str(x[1]) != 'nan') else x, axis = 1)
謝謝!
注意,'np.all([真,真])'將返回TRUE;。我認爲這對OP是有效的。 – 2014-10-28 17:47:27
@PaulH謝謝。我嘗試了'all'但忽略了'np.all'。問題不在於'[True,True]',而在於'False'。 'all(pd.notnull(None))'產生錯誤,'np.all(pd.notnull(None))'不會。 – Korem 2014-10-28 18:01:12
謝謝韓國,它的工作原理!我想知道的是,一個'pd.notnull(df ['C'])'返回'False,True,False',而不是'False,[True,True],False'。 – ragesz 2014-10-29 09:33:30