熊猫:在测试中处理看不见的数据

时间:2018-04-27 20:56:38

标签: python pandas

我有一个训练数据集,正在构建一些机器学习模型。我无法访问测试集,并且想要处理在列车中没有观察到测试中的一个分类特征的可能性。

这是一个说明我的意思的玩具示例:

我有一个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

谢谢!

1 个答案:

答案 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