2017-11-11 57 views
0

在我的數據框df中,我有一些列(即2:11),其值爲NaN或某些文本,如下所示。熊貓用一些列的值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 

對於變量[Legsfront,...,肱三頭肌]我要重新編碼,以便NaN值被零取代 - 這可通過.fillna(0, inplace=True)完成。我在下面的代碼中這樣做了。然後我想重新編碼爲非零,但我做不到。我嘗試過dfb[dfb != 0] = 1dfb.Ass[dfb.Ass != 0] = 1。也許需要for循環?

>>> 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使用:

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

樣本輸出:

 
      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',因爲後者只是一種解決方法。你可以評論(或修改你的答案),這樣我就可以直接改變''''''''''''''''''' – jacob

+0

這很簡單,而不是使用dfb'df [binaryvars] =' – Dark