问题: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、数据判断
检索单个新项目的标签,如果项目丢失,则将值设置为未知文章来源:https://www.toymoban.com/news/detail-853318.html
le_dict.get(new_item, 'Unknown')
3、批量检索 Dataframe 列的标签文章来源地址https://www.toymoban.com/news/detail-853318.html
df['col'] = df['col'].apply(lambda x: le_dict.get(x, 'Unknown'))
# 再将新值删除
df = df[df['col'] != 'Unknown']
df['col'] = df['col'].astype(dtype='int64')
到了这里,关于sklearn的LabelEncoder 遇到新值的解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!