为什么 pd.Series([np.nan]) | pd.Series([True]) 评估为 False?

JZ1*_*JZ1 9 python pandas

为什么下面的代码返回False

>>> pd.Series([np.nan]) | pd.Series([True])
0    False
dtype: bool
Run Code Online (Sandbox Code Playgroud)

Reu*_*ben 4

我认为这是因为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值(每当执行操作时)