问题:sklearn的LabelEncoder函数遇到新值报错
sklearn的LabelEncoder函数,在fit结束后,对dataframe数据进行transform的时候,如果遇到了没在fit时编码规则里的新值,会出现代码报错,不同于spark的LabelEncoder碰到新值会给你编成len+1。
解决办法:基于编码规则的修改
1、保存编码字典
from sklearn.preprocessing import LabelEncoder
le = preprocessing.LabelEncoder()
le.fit(X)
# label编码其实就是映射的字典,将编码字典保存
le_dict = dict(zip(le.classes_, le.transform(le.classes_)))
2、数据判断
检索单个新项目的标签,如果项目丢失,则将值设置为未知
le_dict.get(new_item, 'Unknown')
3、批量检索 Dataframe 列的标签
df['col'] = df['col'].apply(lambda x: le_dict.get(x, 'Unknown'))
# 再将新值删除
df = df[df['col'] != 'Unknown']
df['col'] = df['col'].astype(dtype='int64')