熊猫:在一次热编码中将NaN视为看不见的价值

时间:2018-04-29 15:47:05

标签: python pandas

我有一个训练集,我用它来构建一些机器学习模型,我需要设置一些代码来预测测试集(我无法访问)。

例如,如果我有一个DataFrame,train

    car
0   Audi
1   BMW
2   Mazda

我可以使用pd.get_dummies来获取:

   car_Audi car_BMW car_Mazda
0      1       0       0
1      0       1       0
2      0       0       1

调用此结果DataFrame,train_encoded

现在,假设我的test DataFrame看起来像:

    car
0   Mercedes

我可以使用:

pd.get_dummies(test).reindex(columns=train_encoded.columns)

得到:

   car_Audi car_BMW car_Mazda
0      0       0       0

如何将NaNcar列中看不见的值相同?也就是说,如果我在NaN的{​​{1}}列中遇到car,我想回来:

test

谢谢!

1 个答案:

答案 0 :(得分:1)

如果您生成的字符串filler未显示在df.car中,那么, 在评论中稍微修改了Wen的建议(对于'NAN'df.car中的字符串的情况),你可以使用

df.car.fillna(filler, inplace=True) 
pd.get_dummies(test).reindex(columns=train_encoded.columns)

定义filler的一种方法是,如果您事先可以访问所有df.car,则可以通过

filler = '_' + ''.join(df.car.unique())

因为它至少比其中最长的字符串长1。另一种方式是using a random string

filler = ''.join(random.choice(string.ascii_lowercase) for _ in range(10))

您拥有此类项目的概率小于len(df) / 26 ** 10