Python &引用;包含多个元素的数组的真值不明确";-为NAN搜索数据帧
我试图遍历pandasPython &引用;包含多个元素的数组的真值不明确";-为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
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次,我感到困惑。然后我注意到你指出的错误。现在都修好了。谢谢。太好了,解决了一个问题。我刚刚遇到了另一个,但那是因为我写错了循环。我也解决了那个问题,所以我现在一切都好了。谢谢。太好了,解决了一个问题。我刚刚遇到了另一个,但那是因为我写错了循环。我也解决了那个问题,所以我现在一切都好了。谢谢