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