熊猫用一些列的值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] = 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)
样本输出:
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)
使用'.notnull'是完美的。理想情况下,我只会使用'df'并跳过'dfb',因为后者只是一种解决方法。你可以评论(或修改你的答案),这样我就可以直接改变''''''''''''''''''' – jacob
这很简单,而不是使用dfb'df [binaryvars] =' – Dark