【发布时间】: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 最后两行代码不会产生错误,因为
&是对 numpy 布尔数组的有效操作。至少在我的版本中,它看起来等同于np.logical_and。然后,只要数组不为空,条件就等同于if np.array([True, True, False, False,...]):,它始终为True。 -
@Leporello 适用于哪个版本的 Python 和 NumPy?如果我复制你的代码,我会得到一个
ValueError,如上所述。我正在使用 Python 3.7.3 和 NumPy 1.16.4。或许这早就是一个警告,已经升级为异常了。