Vergleicht logische Werte mit NaN in pandas / numpy

Ich möchte eine elementweise ODER-Operation für zwei Pandas-Reihen von Booleschen Werten ausführen.np.nans sind ebenfalls enthalten.

ch habe drei Ansätze ausprobiert und festgestellt, dass der Ausdruck "np.nan oderFalse "kann zu @ ausgewertet werdTrue, False, undnp.nan je nach ansatz.

Das sind meine Beispielserien:

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

Verwendung der| Betreiber von Pandas:

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

Verwendung derlogical_or Funktion von numpy:

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

Ich definiere eine vektorisierte Version vonlogical_or, das zeilenweise über die Arrays ausgewertet werden soll:

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

Ich benutzevectorized_or auf den beiden Serien und konvertieren Sie seine Ausgabe (die ein Numpy-Array ist) in eine Pandas-Serie:

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

ch frage mich, aus welchen Gründen diese Ergebnisse erzielt wurde
Diese Antwort erklärtnp.logical_or und sagtnp.logical_or(np.nan, False) is beTrue aber warum funktioniert das nur vektorisiert und nicht in Ansatz 2? Und wie lassen sich die Ergebnisse von Ansatz 1 erklären?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage