使用LabelEncoder处理Beers数据集时出现TypeError报错如何解决
问题原因
TypeError: Encoders require their input to be uniformly strings or numbers. Got ['float', 'str']
该报错核心原因是你筛选出的object类型列中存在空值NaN,NaN在Python中属于float类型,导致单列内同时存在字符串和浮点数两种数据类型,不符合LabelEncoder的输入要求。
可行解决方法
- 方法1:先填充空值再编码
先把所有object列的空值统一填充为占位字符串,保证列内全为字符串类型后再做编码,代码示例:from sklearn import preprocessing import pandas as pd df3 = BeerDF.select_dtypes(include=['object']).copy() # 统一填充空值为占位字符串 df3 = df3.fillna('missing') label_encoder = preprocessing.LabelEncoder() df3 = df3.apply(label_encoder.fit_transform) - 方法2:删除含空值的行/列
如果空值占比很低,可以直接删除包含空值的行;如果某列空值占比极高,也可以直接删除该列:# 删除含空值的行 df3 = df3.dropna(axis=0) # 或者删除含空值的列 # df3 = df3.dropna(axis=1) df3 = df3.apply(label_encoder.fit_transform) - 方法3:改用支持空值的编码器
如果使用sklearn 1.0以上版本,可以换用OrdinalEncoder,它原生支持缺失值处理,不需要提前处理空值:from sklearn.preprocessing import OrdinalEncoder ord_encoder = OrdinalEncoder(handle_unknown='use_encoded_value', unknown_value=-1) df3 = ord_encoder.fit_transform(df3) # 需要转成DataFrame格式可额外补充下面这行 # df3 = pd.DataFrame(df3, columns=df3.columns)
内容的提问来源于stack exchange,提问作者RasK
相关产品推荐
相关产品推荐

