Comparando valores lógicos com NaN em pandas / numpy

Eu quero fazer uma operação OR elemento a elemento em dois pandas Série de valores booleanos.np.nans também estão incluídos.

Eu tentei três abordagens e percebi que a expressão "np.nan ouFalse"pode ser avaliado paraTrue, Falseenp.nan dependendo da abordagem.

Estes são os meus exemplos de séries:

series_1 = pd.Series([True, False, np.nan])
series_2 = pd.Series([False, False, False])
Abordagem # 1

Usando o| operador de pandas:

In [5]: series_1 | series_2
Out[5]: 
0     True
1    False
2    False
dtype: bool
Abordagem # 2

Usando ological_or função de numpy:

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

Eu defino uma versão vetorizada delogical_or que deve ser avaliado linha por linha sobre as matrizes:

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

eu usovectorized_or nas duas séries e converta sua saída (que é uma matriz numpy) em uma série de pandas:

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

Eu estou querendo saber sobre as razões para estes resultados.
Esta resposta explicanp.logical_or e dissenp.logical_or(np.nan, False) é serTrue mas por que isso funciona apenas quando vetorizado e não na abordagem nº 2? E como os resultados da Abordagem nº 1 podem ser explicados?

questionAnswers(1)

yourAnswerToTheQuestion