当前位置: 首页 > 面试题库 >

错误:系列的真实值不明确-Python pandas

向嘉誉
2023-03-14
问题内容

我知道以前曾有人问过这个问题,但是当我尝试if发表声明时却遇到错误。我查看了此链接,但对我而言并没有太大帮助。我dfs是DataFrames的列表。

我正在尝试以下,

for i in dfs:
    if (i['var1'] < 3.000):
       print(i)

给出以下错误:

ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

我尝试以下,并得到同样的错误。

for i,j in enumerate(dfs):
    if (j['var1'] < 3.000):
       print(i)

我的var1数据类型是float32。我没有使用任何其他logical运算符和&|。在上面的链接中,这似乎是因为使用了逻辑运算符。为什么会得到ValueError


问题答案:

这是一个小演示,它说明了为什么发生这种情况:

In [131]: df = pd.DataFrame(np.random.randint(0,20,(5,2)), columns=list('AB'))

In [132]: df
Out[132]:
    A   B
0   3  11
1   0  16
2  16   1
3   2  11
4  18  15

In [133]: res = df['A'] > 10

In [134]: res
Out[134]:
0    False
1    False
2     True
3    False
4     True
Name: A, dtype: bool

当我们尝试检查是否这样的系列True-熊猫不知道该怎么做时:

In [135]: if res:
     ...:     print(df)
     ...:
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
...
skipped
...
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

解决方法:

我们可以决定如何处理布尔值的系列-比如if应该返回True,如果 所有 的值是True

In [136]: res.all()
Out[136]: False

或当 至少一个 值为True时:

In [137]: res.any()
Out[137]: True

In [138]: if res.any():
     ...:     print(df)
     ...:
    A   B
0   3  11
1   0  16
2  16   1
3   2  11
4  18  15


 类似资料: