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

如何为OneHotEncoder部分列指定预定义类别?

解决方案

要实现对不同列使用不同的OneHotEncoder配置,你可以借助ColumnTransformer分别处理每一列——给a列指定预定义类别,给b列用默认的自动推断逻辑。这样既能保留完整的编码器(ColumnTransformer会包含两个OHE实例),也能支持后续转换时处理未知类别。

修改后的实现代码

import pandas as pd
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer

def one_hot_encode_categorical_columns(df, columns, category_specs="auto"):
    # 为每一列配置对应的OneHotEncoder
    transformers = []
    for col, specs in zip(columns, category_specs):
        ohe = OneHotEncoder(
            categories=specs,
            sparse=False,
            handle_unknown="ignore"
        )
        transformers.append((f"ohe_{col}", ohe, [col]))
    
    # 初始化列转换器
    ct = ColumnTransformer(
        transformers=transformers,
        remainder="passthrough"  # 保留原DataFrame中未指定编码的列
    )
    
    # 拟合并转换数据
    encoded_data = ct.fit_transform(df)
    # 生成完整的输出列名
    encoded_cols = []
    for name, trans, cols in transformers:
        encoded_cols.extend(trans.get_feature_names_out(cols))
    remaining_cols = [col for col in df.columns if col not in columns]
    all_cols = encoded_cols + remaining_cols
    
    new_df = pd.DataFrame(encoded_data, columns=all_cols)
    return ct, new_df

# 测试用例
df = pd.DataFrame({"a": [1,2,3], "b": ["d", "d", "d"]})

# 调用函数:a列指定预定义类别,b列自动推断
encoder, result_df = one_hot_encode_categorical_columns(
    df,
    columns=["a", "b"],
    category_specs=[[1,2,3,4,5], "auto"]
)

# 查看编码结果
print(result_df)

# 后续转换示例:包含a列未知类别6、b列新类别"e"
new_data = pd.DataFrame({"a": [4,5,6], "b": ["d", "e", "f"]})
transformed_data = encoder.transform(new_data)
print(pd.DataFrame(transformed_data, columns=encoder.get_feature_names_out()))

关键说明

  • ColumnTransformer支持为不同列配置独立的预处理逻辑,这里给a、b列分别分配OneHotEncoder实例,各自设置categories参数。
  • a列传入预定义类别[1,2,3,4,5],即使训练数据中没有4、5,也会生成对应编码列;后续遇到未见过的类别(如6),会被handle_unknown="ignore"忽略,对应编码列全为0。
  • b列使用categories="auto",自动从训练数据中推断类别,后续遇到新类别同样会被忽略。
  • 返回的ColumnTransformer实例可直接用于后续数据转换,完全满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:35:22