提问人:Gerry 提问时间:4/19/2022 最后编辑:Gerry 更新时间:12/7/2022 访问量:754
否定 pandas isna 函数返回 -2
negating pandas isna function returning -2
问:
我对不同环境中工作方式的不一致感到有些困惑。关于为什么布尔值在数字设置中不起作用的任何想法:pd.isna()
~
pd.isna
>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame({'p':['a', 'b', 'c'], 'q':[1, np.nan, 2]})
>>> df
p q
0 a 1.0
1 b NaN
2 c 2.0
>>> df[~pd.isna(df['q'])] # THIS WORKS AS EXPECTED.
p q
0 a 1.0
2 c 2.0
>>> pd.isna(np.nan)
True
>>> not pd.isna(np.nan)
False # THIS WORKS AS EXPECTED.
#### So far so good ####
>>> ~pd.isna(np.nan)
-2 # I WAS EXPECTING False HERE.
>>> ~(pd.isna(np.nan))
-2 # I WAS EXPECTING False HERE.
我不是为什么最后两行 fetch 而不是 .-2
False
答:
1赞
Javad
4/19/2022
#1
这不是关于您使用的最后两行,即按位非运算符,它反转了对象的所有位,二进制不是 for (int 中的 1) 是 -2:pd.isna()
~
True
>>> var = int(True)
>>> var
1
>>> not var
False
>>> ~ var
-2
python 中的 True 和 False 等布尔值是从比较中返回的,python 中的逻辑运算符和成员运算符以及按位运算符返回 int 值。
评论
0赞
Gerry
4/19/2022
谢谢@JavadNikbakht。我仍然很好奇为什么这个相同的按位非运算符在倒数第五行工作,即df[~pd.isna(df['q'])]
评论
df[~pd.isna(df['q'])]
~np.array([True]) = array([False])
~pd.Series([True]) = 0 False dtype:bool
~True = -2