python - 不是 bool 不起作用,而是 bool != True 起作用

标签 python pandas boolean

我正在尝试从 https://data.cityofnewyork.us/Environment/2018-Central-Park-Squirrel-Census-Squirrel-Data/vfnx-vebw 下载的 CSV 中查找唯一颜色的列表。

以下不起作用:

data = pandas.read_csv("2018_Central_Park_Squirrel_Census_-_Squirrel_Data.csv")

fur_color_col = data["Primary Fur Color"]
print(data[not pandas.isna(data["Primary Fur Color"])]["Primary Fur Color"].unique())

错误是:

Traceback (most recent call last):
  File "/Users/arvind.avinash/PycharmProjects/AdHoc/main.py", line 6, in <module>
    print(data[not pandas.isna(data["Primary Fur Color"])]["Primary Fur Color"].unique())
  File "/Users/arvind.avinash/PycharmProjects/AdHoc/venv/lib/python3.9/site-packages/pandas/core/generic.py", line 1537, in __nonzero__
    raise ValueError(
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

以下作品:

data = pandas.read_csv("2018_Central_Park_Squirrel_Census_-_Squirrel_Data.csv")

fur_color_col = data["Primary Fur Color"]
print(data[pandas.isna(data["Primary Fur Color"]) != True]["Primary Fur Color"].unique())

和输出:

['Gray' 'Cinnamon' 'Black']

为什么 not bool 不起作用,而 bool != True 却起作用?

最佳答案

因为数组(在 pandas 或 numpy 中)的 non 是运算符 ~,所以需要:

print(data[~pandas.isna(data["Primary Fur Color"])]["Primary Fur Color"].unique())

对于数组中的比较(在 pandas 或 numpy 中),使用与纯 Python 中相同的运算符,因此 != True 工作良好。


或者可以使用Series.notna :

print(data.loc[data["Primary Fur Color"].notna(), "Primary Fur Color"].unique())

关于python - 不是 bool 不起作用,而是 bool != True 起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69463905/

相关文章:

prolog - 简单的 boolean 表达式测试

java boolean 方法返回语句

python - (python) 文档字符串导致缩进错误

Python Pandas DataFrame hub_table 奇怪的值

python - 使用 python pandas DataFrame 上其他列的信息创建新列

python - 将数字范围转换为顺序范围

mysql - 如何让 MySQL 命令行工具默认显示存储为 BIT 的 boolean 值

python - 为什么 [].append(1) 是 None

Python - 在字符串中定位正则表达式匹配的位置?

python - 为什么可变数据类型生成的哈希码不能作为Python中的字典键?