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

Python 熊猫:在一个热编码中将NaN视为看不见的值,python,pandas,Python,Pandas,我有一个用于构建机器学习模型的训练集,我需要设置一些代码来预测测试集(我没有访问权限) 例如,如果我有一个数据帧,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 调用此结果数据帧,train\u enco

我有一个用于构建机器学习模型的训练集,我需要设置一些代码来预测测试集(我没有访问权限)

例如,如果我有一个数据帧,
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
调用此结果数据帧,
train\u encoded

现在,假设我的
test
数据帧如下所示:

    car
0   Mercedes
我可以使用:

pd.get_dummies(test).reindex(columns=train_encoded.columns)
要获得:

   car_Audi car_BMW car_Mazda
0      0       0       0
如何将
NaN
s视为我的
car
列中的未显示值?也就是说,如果我在
test
中的
car
列中遇到
NaN
,我想返回:

   car_Audi car_BMW car_Mazda
0      0       0       0

谢谢

如果您生成了一个字符串
filler
,该字符串未出现在
df.car
中,则, 稍微修改温在评论中的建议(对于
'NAN'
df.car
中的字符串的情况),您可以使用

df.car.fillna(filler, inplace=True) 
pd.get_dummies(test).reindex(columns=train_encoded.columns)
如果您可以提前访问所有
df.car
,定义
filler
的一种方法是通过

filler = '_' + ''.join(df.car.unique())
因为它至少比其中最长的字符串长1。另一种方式是


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

df.car=df.car.fillna('NAN');pd.get_dummies(test).reindex(columns=train_encoded.columns)
@Wen如果测试中
汽车中有NaN,但火车没有,那么在测试中我不会有额外的列吗?如果我的
汽车中没有训练集的NaN,但我的
汽车中有测试集的NaN,在我的一个热编码测试中会有一个额外的列,对吗?
filler = ''.join(random.choice(string.ascii_lowercase) for _ in range(10))