Python &引用;包含多个元素的数组的真值不明确";-为NAN搜索数据帧

Python &引用;包含多个元素的数组的真值不明确";-为NAN搜索数据帧,python,pandas,nan,Python,Pandas,Nan,我试图遍历pandasDataFrame的所有行,并在特定列中找到NaN的第一个实例。例如: import pandas as pd d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']), 'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])} df = pd.DataFrame(d) for row_index, row in df[:].i

我试图遍历pandas
DataFrame
的所有行,并在特定列中找到NaN的第一个实例。例如:

import pandas as pd

d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
     'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)

for row_index, row in df[:].iterrows():
if pd.isnull(df.ix[:,'one']) == True:
    break
但是我得到:
ValueError:包含多个元素的数组的真值是不明确的。使用a.any()或a.all()


我以为我一次只检查数据帧的一个元素,所以我不知道问题出在哪里。非常感谢您的帮助

干杯

df.index[ df.one.isnull( ) ][ 0 ]
给出第一行的索引,该行在列
中有
null
“one”

查找第一行的更有效方法是定义一个生成器,并获取该生成器的第一个元素,如:

gen = ( idx for idx in df.index if np.isnan( df.one[ idx ] ) )
现在
gen.\uu next\uu()
将是第一个索引

给出第一行的索引,该行在列
中有
null
“one”

查找第一行的更有效方法是定义一个生成器,并获取该生成器的第一个元素,如:

gen = ( idx for idx in df.index if np.isnan( df.one[ idx ] ) )

现在
gen.\uuuu next\uuuu()
将是第一个索引。

请澄清,w/r/t问题,如果您进行调试,您将看到:

ipdb> pd.isnull(df.ix[:,'one'])
a    False
b    False
c    False
d     True
所以你有多个元素。真值是不明确的,因此如果使用.any()将得到真值,而使用.all()将得到假值


注释解决了代码中的错误,我只想清楚地说明任何人的any()all()行为,如果你通过名字遇到这个主题。

只是想澄清一下,w/r/t这个问题,如果你进行调试,你会看到:

ipdb> pd.isnull(df.ix[:,'one'])
a    False
b    False
c    False
d     True
所以你有多个元素。真值是不明确的,因此如果使用.any()将得到真值,而使用.all()将得到假值


这些注释解决了代码中的错误,我只想清楚地说明任何人的any()all()行为,只要是通过名字遇到这个主题的人。

“我以为我一次只检查数据帧的一个元素”:但是
df.ix[:,“one”]
是整个
one
列。要以基于循环的方式执行您想要的操作,您需要执行
如果pd.isnull(第[“一”行]):
看到区别了吗?您好。在将贝扎德的答案应用于我的代码后,它将数据帧打印了4次,我感到困惑。然后我注意到你指出的错误。现在都修好了。谢谢。“我以为我一次只检查了数据帧的一个元素”:但是
df.ix[:,“one”]
是整个
one
列。要以基于循环的方式执行您想要的操作,您需要执行
如果pd.isnull(第[“一”行]):
看到区别了吗?您好。在将贝扎德的答案应用于我的代码后,它将数据帧打印了4次,我感到困惑。然后我注意到你指出的错误。现在都修好了。谢谢。太好了,解决了一个问题。我刚刚遇到了另一个,但那是因为我写错了循环。我也解决了那个问题,所以我现在一切都好了。谢谢。太好了,解决了一个问题。我刚刚遇到了另一个,但那是因为我写错了循环。我也解决了那个问题,所以我现在一切都好了。谢谢