2014-12-03 9 views
3

에서 발생하는 NaN, 0, 및 NA로 모든 열을 떨어 뜨리고 나는이처럼 보이는 DataFrame 있습니다팬더 : DataFrame

import pandas as pd 
import numpy as np 

df = pd.DataFrame({'A': [1, 2.1, np.nan, 4.7, 5.6, 6.8], 
       'B': [0, np.nan, np.nan, 0, 0, 0], 
       'C': [0, 0, 0, 0, 0, 0.0], 
       'D': [5, 5, 5, 5, 5.6, 6.8], 
       'E': ['NA', 'NA', 'NA', 'NA', 'NA', 'NA'],}) 

가 어떻게 떨어질 것을 모든 열 그래서 나는 것의 NA, Nans0 다음 결과를 얻으시겠습니까?

df2 = pd.DataFrame({'A': [1, 2.1, np.nan, 4.7, 5.6, 6.8], 
       'D': [5, 5, 5, 5, 5.6, 6.8],}) 

지금까지 내가 .dropna()이 모든 nan 없애 알고 또한 내가 df2=df[~(df==0).all(axis=1)]을 시도하고 작동하지 않았다.

+0

'C'와 'D'(예 : 'A'와 'D'가 아닌) 열로 만 남기를 원하십니까? –

+0

@ajcr 모두 0, Nan 또는 NA가있는 열이 없기 때문에 A와 D 만 남았습니다. – ccsv

+0

아, 이제 알겠습니다 - 고마워요. –

답변

1
>>> df 
    A B C D E 
0 1.0 0 0 5.0 NA 
1 2.1 NaN 0 5.0 NA 
2 NaN NaN 0 5.0 NA 
3 4.7 0 0 5.0 NA 
4 5.6 0 0 5.6 NA 
5 6.8 0 0 6.8 NA 
>>> f = df.replace([0,'NA'], np.nan).apply(lambda x: any(~x.isnull())) 
>>> f 
A  True 
B False 
C False 
D  True 
E False 
dtype: bool 
>>> df.loc[:,f] 
    A D 
0 1.0 5.0 
1 2.1 5.0 
2 NaN 5.0 
3 4.7 5.0 
4 5.6 5.6 
5 6.8 6.8 
1

에만 null 값을 포함하고 df의 관련 열을 선택하려면이 배열을 사용하지 않는 열의 배열을 찾을 df.isin()all()를 사용하여 시도 할 수 :

>>> df[df.columns[(~df.isin([NaN, 'NA', 0])).all().values]] 
    A D 
0 1.0 5.0 
1 2.1 5.0 
2 NaN 5.0 
3 4.7 5.0 
4 5.6 5.6 
5 6.8 6.8 

또는 더 간결을 : df.loc[:, (~df.isin([NaN, 'NA', 0])).all()]

+0

당신은 NaN 앞에서 np를 잊어 버렸습니다. – ccsv