报错:
1535 @final
1536 def nonzero(self):
-> 1537 raise ValueError(
1538 f"The truth value of a {type(self).name} is ambiguous. "
1539 "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
从报错信息可以看到问题出现在下面的代码:
if ((points_gdf.iloc[vertex_1]["OBJECTID"] == object_id_0) and (points_gdf.iloc[vertex_2]["OBJECTID"] == object_id_1))
or \((points_gdf.iloc[vertex_1]["OBJECTID"] == object_id_1) and (points_gdf.iloc[vertex_2]["OBJECTID"] == object_id_0)):
原因:
在 Python 中,or
和 and
是用于逻辑判断的关键字。然而,在 Pandas 中,由于一些历史原因,直接在条件语句中使用 or
和 and
可能会导致歧义,因此 Pandas 建议使用位运算符 |
(或运算)和 &
(与运算)来替代。
解决:
将 or
和 and
换成位运算符 |
(或运算)和 &
(与运算),例如
if (((points_gdf.iloc[vertex_0]["OBJECTID"] == object_id_0) &(points_gdf.iloc[vertex_1]["OBJECTID"] == object_id_1))
|((points_gdf.iloc[vertex_0]["OBJECTID"] == object_id_1) & (points_gdf.iloc[vertex_1]["OBJECTID"] == object_id_0))):