我有一个训练数据集,正在构建一些机器学习模型。我无法访问测试集,并且想要处理在列车中没有观察到测试中的一个分类特征的可能性。
这是一个说明我的意思的玩具示例:
我有一个DataFrame,old
,如下所示:
old = pd.DataFrame({"car":["Audi", "BMW", "Mazda"]})
看起来像这样:
car
0 Audi
1 BMW
2 Mazda
我现在用这样的热门编码:
new = pd.get_dummies(old)
然后回来:
car_Audi car_BMW car_Mazda
0 1 0 0
1 0 1 0
2 0 0 1
这一切都很好。但是,如果我在测试中遇到一行看起来像:
car
0 Mercedes
我可以进行单热编码,但我最终会得到一个我在测试中没有的专栏。
Pandas有没有办法忽略我在火车上没有看到的测试值?
因此,我的梅赛德斯行的所需输出为:
car_Audi car_BMW car_Mazda
0 0 0 0
谢谢!
答案 0 :(得分:4)
您可以使用reindex
来实现此目标
old = pd.DataFrame({"car":["Audi", "BMW", "Mazda"]})
new = pd.get_dummies(old)
test= pd.DataFrame({"car":["Audi", "BMW", "Mazda","Mercedes"]})
pd.get_dummies(test).reindex(columns=new.columns)
Out[460]:
car_Audi car_BMW car_Mazda
0 1 0 0
1 0 1 0
2 0 0 1
3 0 0 0 # row 3 will be all 0 after modified