我有一个训练数据集,正在构建一些机器学习模型。我无权访问测试集,并且想要处理在训练中未观察到测试中的分类特征之一的可能性。
这是一个玩具示例,说明了我的意思:
我有一个数据框,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
Thanks!
您可以使用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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)