【问题标题】:Problem with Error "The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()."错误问题“系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。”
【发布时间】:2019-11-14 00:48:28
【问题描述】:

我正在尝试编写代码来定义建筑物的几何形状,但我收到以下错误消息:

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

我在这里和网上某处阅读了很多关于它的帖子,但我找不到类似的东西。

这是我的 csv_file:

fid Shrt_axis   Lng_axis    angle   area_rett   perimeter   area
1   12.5    26.07   136.31  325.91  77.15   299.28
2   11.01   11.68   105.24  128.66  45.39   125.11

这是我的代码:

import pandas as pd
Tabella = pd.read_csv("prova_2.csv", sep=";", header= )

lato_corto = Tabella.loc[:,'Shrt_axis']    
lato_lungo = Tabella.loc[:,'Lng_axis']
#continue with other dates from my data set.

rapporto_lati = lato_lungo / lato_corto

for row in Tabella:
    if 1 =< rapporto_lati =< 1.1:
        print("è un quadrato")

然后我在网上看了一些东西,但它不能正常工作:

if (rapporto_lati > 1) & (rapporto_lati < 1.1):
    print('è un quadrato')

在这种情况下,我没有任何错误消息,但结果不正确。

【问题讨论】:

  • 到目前为止我发现的最好的副本是 stackoverflow.com/questions/38834028/… 。不幸的是,这被标记为重复,但后者仅部分解决了问题(它不处理链式比较,而此评论中链接的问题可以)。因此,我不愿意将此问题标记为重复。
  • 最后两行代码也应该产生错误;事实上,同样的错误。
  • 请注意,如果您逐行遍历数据框,则应该以不同的方式做事。但是,实际上,您不应该逐行遍历数据框:您需要一次对整个表/列/系列进行操作。
  • @00 最后两行代码不会产生错误,因为&amp; 是对 numpy 布尔数组的有效操作。至少在我的版本中,它看起来等同于np.logical_and。然后,只要数组不为空,条件就等同于 if np.array([True, True, False, False,...]):,它始终为 True
  • @Leporello 适用于哪个版本的 Python 和 NumPy?如果我复制你的代码,我会得到一个ValueError,如上所述。我正在使用 Python 3.7.3 和 NumPy 1.16.4。或许这早就是一个警告,已经升级为异常了。

标签: python pandas


【解决方案1】:

用途:

if ((rapporto_lati > 1) & (rapporto_lati < 1.1)).all():
    print("è un quadrato")

如果变量涉及单个项目,则只能使用(链式)比较方法:对于多个项目,例如列表、(NumPy)数组或 Pandas 系列,您需要确定比较对于每个单独的元素。这就是为什么您需要.all()(或.any(),如果您的意图是只有一个项目比较有效就足够了)。

对于链式比较,您仍然不能对数组等进行以下操作:

(1 <= rapporto_lati < 1.1).all()   # invalid

对于 NumPy 数组(以及 Pandas 系列),您必须单独执行比较,然后合并比较。每次比较都会产生一个包含TrueFalse 项的数组,这两个数组可以与&amp; 运算符组合(使用标准布尔逻辑)。您还需要将两个比较用括号括起来,因为&amp; 运算符比比较运算符绑定得更紧密。

所有这些,你就到达了上面的结构。

【讨论】:

    猜你喜欢
    • 2021-07-02
    • 1970-01-01
    • 2021-08-31
    • 2016-12-01
    • 1970-01-01
    • 2021-09-15
    • 2020-10-15
    • 2021-08-14
    • 1970-01-01
    相关资源
    最近更新 更多