Het verschil tussen vergelijking met np.nan en isnull()

Ik veronderstelde dat

data[data.agefm.isnull()]

en

data[data.agefm == numpy.nan]

zijn gelijkwaardig. Maar nee, de eerste retourneert echt rijen waarin agefm NaN is, maar de tweede retourneert een leeg DataFrame. Ik dank dat weggelaten waarden altijd gelijk zijn aan np.nan, maar het lijkt verkeerd.

agefm-kolom heeft float64-type:

(Pdb) data.agefm.describe()
count    2079.000000
mean       20.686388
std         5.002383
min        10.000000
25%        17.000000
50%        20.000000
75%        23.000000
max        46.000000
Name: agefm, dtype: float64

Kunt u mij alstublieft uitleggen wat data[data.agefm == np.nan]precies betekent?


Antwoord 1, autoriteit 100%

np.nanis niet vergelijkbaar met np.nan… rechtstreeks.

np.nan == np.nan
False

Terwijl

np.isnan(np.nan)
True

Kan ook

pd.isnull(np.nan)
True

voorbeelden
Filtert niets omdat niets gelijk is aan np.nan

s = pd.Series([1., np.nan, 2.])
s[s != np.nan]
0    1.0
1    NaN
2    2.0
dtype: float64

Filt de nul weg

s = pd.Series([1., np.nan, 2.])
s[s.notnull()]
0    1.0
2    2.0
dtype: float64

Gebruik vreemd vergelijkingsgedrag om te krijgen wat we willen toch. Als np.nan != np.nanis Truedan

s = pd.Series([1., np.nan, 2.])
s[s == s]
0    1.0
2    2.0
dtype: float64

gewoon dropna

s = pd.Series([1., np.nan, 2.])
s.dropna()
0    1.0
2    2.0
dtype: float64

Other episodes