【发布时间】:2016-09-22 09:33:29
【问题描述】:
我有一组数据框,其中一个列包含一个分类变量。我想将其转换为几个虚拟变量,在这种情况下,我通常会使用get_dummies。
发生的情况是get_dummies 查看每个数据帧中可用的数据以找出有多少类别,从而创建适当数量的虚拟变量。但是,在我现在正在处理的问题中,我实际上提前知道可能的类别是什么。但是,当单独查看每个数据框时,不一定会出现所有类别。
我的问题是:有没有办法将类别的名称传递给get_dummies(或等效函数),这样,对于未出现在给定数据框中的类别,它只会创建一列 0?
可以做到这一点的东西:
categories = ['a', 'b', 'c']
cat
1 a
2 b
3 a
变成这样:
cat_a cat_b cat_c
1 1 0 0
2 0 1 0
3 1 0 0
【问题讨论】:
-
您正在寻找
sklearn.OneHotEncoder。看这里:scikit-learn.org/stable/modules/generated/… -
@ssm:
get_dummies实现了与OneHotEncoder相同的功能,另外一个好处是输出是一个易于理解的带有标记列的pandas 数据框,而不是普通的ndarray。 -
我误解了这个问题。谢谢!
-
我认为对于模型训练,没有必要执行这一步。如果训练数据中缺少一个类别,无论您是否提供全为零的列,您的模型都不会学到任何有助于预测包含该变量的测试实例的内容。
-
@Quickbeam2k1 不需要这样做的情况很少。对于初始原型设计,它可能不是,但对于任何生产代码,您都希望确保所有模型输入具有相同的列。
标签: python pandas machine-learning dummy-variable