我有一个数据框(Python 2.7,pandas 0.15.0):
df=
A B C
0 NaN 11 NaN
1 two NaN ['foo', 'bar']
2 three 33 NaN
我想为不包含特定列中NULL值的行应用一个简单的函数。我的函数应该是尽可能简单的:
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”是否存在NULL值,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, True])
将返回True
。我认为这对于原帖作者来说是可行的。 - Paul Hall
但是忽略了np.all
。问题不是在于[True, True]
,而是在于False
。虽然all(pd.notnull(None))
报错,但是np.all(pd.notnull(None))
没有。 - Korempd.notnull(df['C'])
返回的是False, True, False
而不是False, [True, True], False
。 - ragesz