Comparación de valores lógicos con NaN en pandas / numpy

Quiero hacer una operación OR basada en elementos en dos series pandas de valores booleanos.np.nans también están incluidos.

He intentado tres enfoques y me di cuenta de que la expresión "np.nan oFalse"se puede evaluar paraTrue, Falseynp.nan Dependiendo del enfoque.

Estas son mis series de ejemplo:

series_1 = pd.Series([True, False, np.nan])
series_2 = pd.Series([False, False, False])
Enfoque n. ° 1

Utilizando la| operador de pandas:

In [5]: series_1 | series_2
Out[5]: 
0     True
1    False
2    False
dtype: bool
Enfoque n. ° 2

Utilizando lalogical_or función de numpy:

In [6]: np.logical_or(series_1, series_2)
Out[6]: 
0     True
1    False
2      NaN
dtype: object
Enfoque n. ° 3

Defino una versión vectorizada delogical_or que se supone que debe evaluarse fila por fila sobre las matrices:

@np.vectorize
def vectorized_or(a, b):
   return np.logical_or(a, b)

yo suelovectorized_or en las dos series y convertir su salida (que es una matriz numpy) en una serie de pandas:

In [8]:  pd.Series(vectorized_or(series_1, series_2))
Out[8]: 
0     True
1    False
2     True
dtype: bool
Pregunta

Me pregunto las razones de estos resultados.
Esta respuesta explicanp.logical_or y dicenp.logical_or(np.nan, False) es serTrue pero ¿por qué esto solo funciona cuando está vectorizado y no en el Enfoque n. ° 2? ¿Y cómo se pueden explicar los resultados del Enfoque n. ° 1?

Respuestas a la pregunta(1)

Su respuesta a la pregunta