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

保存LabelEncoders字典时classes_属性被最后一个编码器覆盖

问题分析与解决
  • 问题根源:你全程复用了同一个LabelEncoder实例le,每次调用le.fit()都会覆盖这个实例的内部属性(比如classes_)。字典label_object里存储的是实例的引用,不是独立副本,所以循环结束后所有键指向的都是最后一次fit后的同一个实例,自然所有classes_都变成最后一列的类别。

  • 修复方案:每次处理新列时,创建一个新的LabelEncoder实例,避免复用导致的状态覆盖。

修改后的代码:

from sklearn.preprocessing import LabelEncoder

label_object = {}
for col in data:
    if data[col].dtype == 'object':
        unique_vals = data[col].unique()
        # 注意:原注释写的是"If 2 or fewer unique categories",但代码判断的是>=2,确认逻辑是否符合你的需求
        if len(unique_vals) >= 2:
            # 每次循环创建新的LabelEncoder实例
            le = LabelEncoder()
            le.fit(data[col])
            label_object[col] = le
            # 转换当前列数据
            data[col] = le.transform(data[col])

补充说明:

  • 原代码里重复写了两次label_object[col] = le,属于冗余操作,去掉一次即可。
  • 检查注释和代码逻辑是否匹配:如果你的需求是处理类别数≤2的列,需要把len(unique_vals) >= 2改成len(unique_vals) <= 2。

内容的提问来源于stack exchange,提问作者Metel Stairs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:12:21