熊猫用一些列的值1取代非零值

问题描述:

在我的数据框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 

我认为你正在寻找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