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))