1. ホーム
  2. python

[解決済み] np.nanとisnull()の比較の違いについて

2022-03-04 20:33:21

質問

私は、次のように考えています。

data[data.agefm.isnull()]

そして

data[data.agefm == numpy.nan]

は等価です。しかし、いいえ、最初のものは本当にagefmがNaNである行を返しますが、2番目は空のDataFrameを返します。私は省略された値が常に等しいことに感謝します。 np.nan しかし、それは間違っているようです。

agefm カラムは float64 型です。

(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

とはどういう意味なのか、教えてください。 data[data.agefm == np.nan] とはどういう意味ですか?

どのように解決するのですか?

np.nan とは比較にならない。 np.nan ... 直接

np.nan == np.nan

False

一方

np.isnan(np.nan)

True

また、次のようなことも可能です。

pd.isnull(np.nan)

True



とは等しくないので、何もフィルタリングしません。 np.nan

s = pd.Series([1., np.nan, 2.])
s[s != np.nan]

0    1.0
1    NaN
2    2.0
dtype: float64

nullをフィルタリングする

s = pd.Series([1., np.nan, 2.])
s[s.notnull()]

0    1.0
2    2.0
dtype: float64

とにかく欲しいものを手に入れるために、奇妙な比較動作を使用する。 もし np.nan != np.nanTrue では

s = pd.Series([1., np.nan, 2.])
s[s == s]

0    1.0
2    2.0
dtype: float64

ただ dropna

s = pd.Series([1., np.nan, 2.])
s.dropna()

0    1.0
2    2.0
dtype: float64