为什么下面的代码返回False
?
>>> pd.Series([np.nan]) | pd.Series([True])
0 False
dtype: bool
Run Code Online (Sandbox Code Playgroud)
我认为这是因为np.nan
元类为float
并且我猜重写__bool__
为非零:
np.nan.__bool__() == True
Run Code Online (Sandbox Code Playgroud)
以同样的方式:
>>>np.nan or None
nan
Run Code Online (Sandbox Code Playgroud)
pandas 的解决方案是:
pd.Series([np.nan]).fillna(False) | pd.Series([True])
Run Code Online (Sandbox Code Playgroud)
编辑 ***
为了清楚起见,在pandas 0.24.1
方法中:_bool_method_SERIES
在线1816
有.../pandas/core/ops.py
一个分配:
fill_bool = lambda x: x.fillna(False).astype(bool)
Run Code Online (Sandbox Code Playgroud)
这就是您所描述的行为的来源。即它是有目的地设计的,因此np.nan
被视为一个False
值(每当执行或操作时)