考虑数据帧df
,它等于:
apple carrot pear
0 3 1
1 3 2
2 4 1 3
我可以使用sklearn的dictvector对其进行热编码,如下所示:
^{pr2}$这样可以得到:
array([[ 3., 0., 1., 0., 1.],
[ 0., 1., 3., 2., 0.],
[ 4., 0., 1., 3., 0.]])
我们可以看到列的特征名称:
enc.feature_names_
['apple', 'apple=', 'carrot', 'pear', 'pear=']
因此,我们可以看到第二列指示apple列是否持有''
。在
如果我们想得到同样的结果:
pd.get_dummies(df)
carrot apple_3 apple_4 apple_ pear_2 pear_3 pear_
0 1 1 0 0 0 0 1
1 3 0 0 1 1 0 0
2 1 0 1 0 0 1 0
这似乎为apple和pear列中的每个值生成了一个分类变量,大概是因为该列现在有一个非数字类型。这不是我想要的。在我的实际数据中,会有很多不同的数值,唯一的非数值是''
,因此这将不必要地创建大量的额外列。在
Is it possible to make get_dummies give the same output as sklearn's DictVectorizer?
一般来说,由于我的数据帧非常大,有没有任何方法可以直接转到DictVectorizer生成的内容,而不必先从数据帧转换为字典列表。在
我不能让
pandas.get_dummies()
像这样工作,而且我不认为它被设置为只能为某些值创建分类变量。在我制作了this Gist,它提供了您想要的输出。它applies是一个用1代替空值,用0代替非空值的函数。然后,您可以将这个新的数据帧与原始的数据帧合并以获得所需的结果。在
我认为
get_dummies
做不到。在但是this answer使用
DictVectorizer
直接传递数据帧,它将避免转换为dict
。在以下(pratapvardhan)作品:
比较一下这个解决方案的速度是非常有趣的。在
相关问题 更多 >
编程相关推荐