2016-09-20 13 views
1

에 따라 나는 나는 다음과 같은 노력하고 df팬더 : 슬라이스 dataframe NaN의

prod_id prod_ref 
10  ef3920 
12  bovjhd 
NaN  lkbljb 
NaN  jknnkn 
30  kbknkn 

dataframe 다음과 같습니다

df[df['prod_id'] != np.nan] 

하지만 정확히 같은 dataframe를 얻을. 나는 내가 뭘 잘못

prod_id prod_ref 
10  ef3920 
12  bovjhd 
30  kbknkn 

을 표시 할 것

?

답변

3

사용 기능 notnull 또는 isnull 반전 :

print (df[df.prod_id.notnull()]) 
    prod_id prod_ref 
0  10.0 ef3920 
1  12.0 bovjhd 
4  30.0 kbknkn 

print (df[~df.prod_id.isnull()]) 

    prod_id prod_ref 
0  10.0 ef3920 
1  12.0 bovjhd 
4  30.0 kbknkn 

또 다른 해결책은 dropna이지만, 체크 NaN에 대한 열을 지정 필요 : 다른 열의

print (df.dropna(subset=['prod_id'])) 
    prod_id prod_ref 
0  10.0 ef3920 
1  12.0 bovjhd 
4  30.0 kbknkn 

경우 NaN 값, Alberto Garcia-Raboso's solution를 사용하지 않습니다.

+0

@ gabra - 편집 해 주셔서 감사합니다. 불행히도 답변도 수정하므로 커뮤니티에서 거부했습니다. – jezrael

+0

감사합니다. 내가 원했던 것. –

3

np.nan != np.nanTrue (또는 np.nan == np.nanFalse)입니다.

df.dropna() 

출력 :

기본적으로
prod_id prod_ref 
0  10.0 ef3920 
1  12.0 bovjhd 
4  30.0 kbknkn 

, .dropna()는 열에서 NaN이있는 행을 삭제합니다 팬더 당신이 원하는 일을 할 수 .dropna() 방법을 제공합니다. subset 인수를 사용하여

  • 체크 일부 열 및 (당신이 그것을 사용하는 경우, subset에서)
  • 은 행이 NaN의 모든 열을 포함 할 것을 요구 : 당신은 두 가지 방법으로이 동작을 조정할 수 how='all' —을 사용하면 기본값은 how='any'입니다.

documentation을 확인할 수 있습니다.

+0

특히'np.nan! = np.nan' 및'np.nan == np.nan' 설명에 감사드립니다. –