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

时间:2017-11-11 12:25:30

标签: python pandas

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

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找notnull astype 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)