Сравнивая логические значения с NaN в пандах / numpy

Я хочу сделать поэлементную операцию ИЛИ для двух серий пул логических значений.np.nanс также включены.

Я попробовал три подхода и понял, что выражение "np.nan или жеFalse"можно оценитьTrue, False, а такжеnp.nan в зависимости от подхода.

Вот мой пример серии:

series_1 = pd.Series([True, False, np.nan])
series_2 = pd.Series([False, False, False])
Подход № 1

С использованием| оператор панд:

In [5]: series_1 | series_2
Out[5]: 
0     True
1    False
2    False
dtype: bool
Подход № 2

С использованиемlogical_or функция от NumPy:

In [6]: np.logical_or(series_1, series_2)
Out[6]: 
0     True
1    False
2      NaN
dtype: object
Подход № 3

Я определяю векторизованную версиюlogical_or который должен оцениваться построчно по массивам:

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

я используюvectorized_or на две серии и преобразовать его вывод (который является массивом Numpy) в серии панд:

In [8]:  pd.Series(vectorized_or(series_1, series_2))
Out[8]: 
0     True
1    False
2     True
dtype: bool
Вопрос

Мне интересно, о причинах этих результатов.
Этот ответ объясняетnp.logical_or и говоритnp.logical_or(np.nan, False) это будетTrue но почему это работает только в векторизации, а не в подходе № 2 И как объяснить результаты подхода № 1?