对于某些列,Pandas 将非零值替换为值 1



在我的数据帧df中,我有一些列(即 2:11(采用值 NaN 或一些文本,如下所示。

  >>> 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, ..., Triceps],我想重新编码,以便将 NaN 值替换为零 - 这可以使用 .fillna(0, inplace=True) 来完成。我已经在下面的代码中这样做了。然后我想将非零重新编码为 1,但我做不到。我已经尝试过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  

我认为您正在寻找notnull astype int而不是使用fillna

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

示例输出:

             瑜伽 Cardio_time 腿前 腿 后 屁股 小腿 背部 二头肌日期                                                                      2016-01-15     1            1          1         0    1     1     0       02001-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)

最新更新