在我的数据帧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] = 1
和dfb.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)