使用LabelEncoder编码列时报NoneType与str比较TypeError如何解决
报错原因
LabelEncoder拟合数据时会自动对特征取值做排序,你遇到该报错的核心原因是kat_df["GND_CODE"]列中存在未被发现的None/NaN缺失值,缺失值和字符串类型的'E'/'K'进行大小比较时触发了类型不兼容错误。
你可以先执行如下代码确认缺失值的存在:
# dropna=False 会统计缺失值的数量 print(kat_df["GND_CODE"].value_counts(dropna=False))
修复方案
- 方案1:丢弃缺失值后编码
如果缺失样本量极少、对业务无影响,可以直接过滤掉缺失行再编码:
from sklearn.preprocessing import LabelEncoder lbe = LabelEncoder() # 仅对非空值做编码 encoded_vals = lbe.fit_transform(kat_df["GND_CODE"].dropna())
- 方案2:填充缺失值后编码
如果需要保留所有样本,可以先给缺失值填充一个独立的占位符,将缺失值也作为单独一类处理:
from sklearn.preprocessing import LabelEncoder lbe = LabelEncoder() # 缺失值填充为自定义字符串后再编码 kat_df["GND_CODE_ENCODED"] = lbe.fit_transform(kat_df["GND_CODE"].fillna("MISSING"))
内容的提问来源于stack exchange,提问作者nefi。
相关产品推荐
相关产品推荐

