You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:09:01