首页 > 解决方案 > not bool 不起作用,但 bool != True 有效

问题描述

我正在尝试从从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

标签: pythonpandasboolean

解决方案


因为non对于数组(在 pandas 或 numpy 中)是 operator ~,所以需要:

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())

推荐阅读