ValueError:系列的真值不明确 [英] ValueError: The truth value of a Series is ambiguous

查看:88
本文介绍了ValueError:系列的真值不明确的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

>>> df.head()
                         № Summer  Gold  Silver  Bronze  Total  № Winter  \
Afghanistan (AFG)              13     0       0       2      2         0
Algeria (ALG)                  12     5       2       8     15         3
Argentina (ARG)                23    18      24      28     70        18
Armenia (ARM)                   5     1       2       9     12         6
Australasia (ANZ) [ANZ]         2     3       4       5     12         0

                         Gold.1  Silver.1  Bronze.1  Total.1  № Games  Gold.2  \
Afghanistan (AFG)             0         0         0        0       13       0
Algeria (ALG)                 0         0         0        0       15       5
Argentina (ARG)               0         0         0        0       41      18
Armenia (ARM)                 0         0         0        0       11       1
Australasia (ANZ) [ANZ]       0         0         0        0        2       3

                         Silver.2  Bronze.2  Combined total
Afghanistan (AFG)               0         2               2
Algeria (ALG)                   2         8              15
Argentina (ARG)                24        28              70
Armenia (ARM)                   2         9              12
Australasia (ANZ) [ANZ]         4         5              12

不确定为什么我会看到此错误:

Not sure why do I see this error:

>>> df['Gold'] > 0  | df['Gold.1'] > 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/ankuragarwal/data_insight/env/lib/python2.7/site-packages/pandas/core/generic.py", line 917, in __nonzero__
    .format(self.__class__.__name__))
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

这里有什么歧义?

但这可行:

>>> (df['Gold'] > 0)  | (df['Gold.1'] > 0)

推荐答案

假设我们有以下DF:

In [35]: df
Out[35]:
   a  b  c
0  9  0  1
1  7  7  4
2  1  8  9
3  6  7  5
4  1  4  6

以下命令:

df.a > 5 | df.b > 5

因为|具有更高的优先级(与>相比),因此在运算符优先级表),它将被转换为:

because | has higher precedence (compared to >) as it's specified in the Operator precedence table) it will be translated to:

df.a > (5 | df.b) > 5

将被翻译为:

df.a > (5 | df.b) and (5 | df.b) > 5

逐步:

In [36]: x = (5 | df.b)

In [37]: x
Out[37]:
0     5
1     7
2    13
3     7
4     5
Name: c, dtype: int32

In [38]: df.a > x
Out[38]:
0     True
1    False
2    False
3    False
4    False
dtype: bool

In [39]: x > 5
Out[39]:
0    False
1     True
2     True
3     True
4    False
Name: b, dtype: bool

但最后一次操作不起作用:

In [40]: (df.a > x) and (x > 5)
---------------------------------------------------------------------------
...
skipped
...
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

上面的错误消息可能会导致缺乏经验的用户执行以下操作:

The error message above might lead inexperienced users to do something like this:

In [12]: (df.a > 5).all() | (df.b > 5).all()
Out[12]: False

In [13]: df[(df.a > 5).all() | (df.b > 5).all()]
...
skipped
...
KeyError: False

但是在这种情况下,您只需要显式设置优先级即可获得预期结果:

But in this case you just need to set your precedence explicitly in order to get expected result:

In [10]: (df.a > 5) | (df.b > 5)
Out[10]:
0     True
1     True
2     True
3     True
4    False
dtype: bool

In [11]: df[(df.a > 5) | (df.b > 5)]
Out[11]:
   a  b  c
0  9  0  1
1  7  7  4
2  1  8  9
3  6  7  5

这篇关于ValueError:系列的真值不明确的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆