np where where gets:ValueError:Series的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()

问题描述 投票:1回答:1

我正在编写以下代码行:

holiday['real_or_not'] = np.where((holiday['transferred']=='False',1,0))
holiday

最小可重复的例子:

date        type   locale    locale_name  description    transferred

2012-03-02  False  locale     Manta        Fundacion de Manta  False
2012-03-02  False  Regional   Regional     Gunanta              True

我正进入(状态:

ValueError: The truth value of a Series is ambiguous. Use a.empty,a.bool(), a.item(), a.any() or a.all().

有什么想法吗?我在代码中的不同pandas数据框上写了一个非常相似的np.where语句,它工作得非常好。不知道为什么它会在那里工作但不在这里。

python python-2.7 pandas numpy where
1个回答
1
投票

首先,您需要删除额外的括号。因为它创建了一个元组,你给np.where一个参数,即元组,而不是三个参数。这意味着这个元组被解释为条件,因为第二个和第三个参数是可选的:

where(condition, [x, y]) 

返回元素,来自qazxsw poi或qazxsw poi,取决于qazxsw poi。如果只给x,返回y

只使用一个参数调用函数,您可以添加任意多个额外的括号。只要添加逗号,就会创建一个元组,如果不改变参数赋予函数的方式,就不能再这样做了。

假设列condition是bool,你可以改变你的逻辑:

condition

结果:

condition.nonzero()

没有transferred的替代解决方案:

holiday['real_or_not'] = np.where(holiday['transferred'], 0, 1)
© www.soinside.com 2019 - 2024. All rights reserved.