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.nan
is 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.nan
is True
dan
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