2017-11-11 3 views
0

내 데이터 프레임에 df 아래에 나와있는 것처럼 NaN 또는 일부 텍스트 값을 사용하는 일부 열 (즉 2:11)이 있습니다. [Legsfront이, ..., 삼두근] I는 NaN이 값은 0으로 대체되도록 레코딩하고자하는 변수의팬더는 0이 아닌 일부 값을 1로 대체합니다.

>>> df.head(2) 
       Yoga Cardio_time  Legsfront Legsback Ass Calf Back Biceps \ 
    date                   
    2016-01-15 0.0   3.0 Framsida lår  NaN Rumpa Vad NaN NaN 
    2001-01-01 0.0   40.0 Framsida lår  NaN NaN NaN NaN NaN 

       Chest Shoulders Triceps Other Muscles_time Stretch_time Notes 
    date                    
    2016-01-15 NaN  NaN  NaN testing   NaN   NaN NaN 
    2001-01-01 Bröst  NaN  NaN  NaN   NaN   NaN NaN 

- 이것은 .fillna(0, inplace=True)를 사용하여 수행 될 수있다. 나는 아래의 코드에서 그렇게했다. 그렇다면 나는 0이 아닌 것을 1로 재 부호화하고 싶지만 그것을 할 수는 없다. 나는 dfb[dfb != 0] = 1dfb.Ass[dfb.Ass != 0] = 1으로 시도했다. 어쩌면 for 루프가 필요할까요?

ndf = df.notnull().astype(int) 

샘플 출력은 :

>>> binaryvars = ['Legsfront', 'Legsback', 'Ass', 'Calf', 'Back', 'Biceps', 'Chest', 'Shoulders', 'Triceps'] 
    >>> dfb = df[binaryvars] 
    >>> dfb.fillna(0, inplace=True) 
    >>> dfb.head(2) 
       Legsfront Legsback Ass Calf Back Biceps Chest Shoulders \ 
    date                  
    2016-01-15 Framsida lår  0 Rumpa Vad 0  0  0   0 
    2001-01-01 Framsida lår  0 0 0 0  0 Bröst   0 

      Triceps 
    date     
    2016-01-15  0 
    2001-01-01  0 

답변

1

난 당신이 notnullastype int을 찾는 대신 fillna 사용을 사용하는 생각

 
      Yoga Cardio_time Legsfront Legsback Ass Calf Back Biceps 
date                  
2016-01-15  1   1   1   0 1  1  0  0 
2001-01-01  1   1   1   0 0  0  0  0 

귀하의 경우에는 당신이 할 수있는

binaryvars = ['Legsfront', 'Legsback', 'Ass', 'Calf', 'Back', 'Biceps', 'Chest', 'Shoulders', 'Triceps'] 
dfb = df[binaryvars].notnull().astype(int) 
,

메인 데이터 프레임의 데이터를 변경하려면

df[binaryvars] = df[binaryvars].notnull().astype(int) 
+0

'.notnull'을 사용하는 것이 좋습니다. 이상적으로 나는 단지'df'로 작업 할 것이고'dfb'를 생략 할 것입니다. 당신은'df'에서'binaryvars'를 직접 변경할 수 있도록 당신의 코멘트 (또는 당신의 대답을 수정할 수 있습니까?)를 주시겠습니까? – jacob

+0

dfb 대신에 간단합니다 'df [binaryvars] =' – Dark

관련 문제