2016-12-27 5 views
3

Iはnp.nanする比較とISNULLとの差()

data[data.agefm.isnull()] 

data[data.agefm == numpy.nan] 

が等価であると仮定。しかし、最初の行はagefmがNaNの行を返しますが、2番目の行は空のDataFrameを返します。省略値は常にnp.nanに等しいことに感謝しますが、それは間違っています。 data[data.agefm == np.nan]が正確に何を意味するのかで、

(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 

はあなたが私にしてください説明してもらえ:

agefm列はのfloat64型を持って?

+0

あなたは 'np.isnan'を使用すべきだと思います。 – Divakar

+1

これらは同じではありません:http://stackoverflow.com/questions/20320022/why-in-numpy-nan-nan-is-false-while-nan-in-nan-is-true – ayhan

+0

@Divakar私は、これは* pandas *のギャップですか、あるいは私は概念的な間違いをしていますか? – sergzach

答えて

4

np.nanは、np.nan ...と直接比較できません。何がに等しいではありませんので、

np.isnan(np.nan) 

True 

pd.isnull(np.nan) 

True 


フィルタ何もしませんでした

np.nan == np.nan 

False 

ながら

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

0 1.0 
1 NaN 
2 2.0 
dtype: float64 

フィルタアウトヌル我々がとにかく欲しいものを得るために

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 
+0

'np.isnan'と' pd.isnull'は同等ですか? – sergzach

+0

@sergzachいいえ、しかし近くに。私は 'pd.isnull'がnullのためにいくつかの事をチェックすると信じています。 – piRSquared

+3

@sergzach 'NaN'の場合はYes、' None'の場合はできません。オブジェクト配列に 'np.isnan'を使うことはできません。 – ayhan

関連する問題