2016-12-27 12 views
3

제가사이의 차이()

data[data.agefm.isnull()] 

data[data.agefm == numpy.nan] 

가 동일하다는 것을 가정. 그러나 아니요, 첫 번째 행은 agefm이 NaN 인 행을 반환하지만 두 번째 행은 빈 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

dropna는'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 그래서, if 나는 이것이 판다 (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 

우리가 어쨌든 원하는 것을 얻을 수있는 널 (null)에게

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

0 1.0 
2 2.0 
dtype: float64 

사용 홀수 비교 동작을 필터링합니다. np.nan != np.nan 다음 True 경우

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

0 1.0 
2 2.0 
dtype: float64 

그냥

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'의 경우 '예'이고 '없음'의 경우는 아닙니다. 객체 배열에는'np.isnan'을 사용할 수 없습니다. – ayhan