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

如何用scikit-learn对CSV标签列独热编码并替换原列保留列头

问题解决方法

核心修改点

  • 调整OneHotEncoder参数关闭稀疏矩阵输出,调用内置方法生成带原列名前缀的编码后列名
  • 导出文件时显式指定分隔符为空格,避免出现制表符

修改后完整代码

import pandas as pd
from sklearn.preprocessing import OneHotEncoder

# 读取CSV文件逻辑保持不变
df = pd.read_csv("some_file.csv", delimiter=" ")

categorical_cols = ["C1", "C2"]
# 修改1:初始化时指定sparse_output=False输出密集数组,避免格式异常
one_hot_encoder = OneHotEncoder(sparse_output=False)
transformed = one_hot_encoder.fit_transform(df[categorical_cols])
# 修改2:用get_feature_names_out生成带原分类列前缀的列名,直接传入DataFrame的columns参数
encoded_data = pd.DataFrame(
    transformed, 
    index=df.index,
    columns=one_hot_encoder.get_feature_names_out(categorical_cols)
)
# 合并、删除原列逻辑保持不变
df = pd.concat([df, encoded_data], axis=1).drop(["C1", "C2"], axis=1)

# 修改3:导出文件时显式指定分隔符为空格,彻底避免制表符出现
df.to_csv("encoded_result.csv", sep=" ", index=False)

效果说明

编码后的列名会自动生成为C1_1、C1_2、C1_3、C2_2、C2_3、C2_4格式,完全保留原分类列的前缀标识;最终导出的CSV文件所有字段用空格分隔,不会出现制表符。
如果使用scikit-learn 1.2以下版本,把sparse_output=False替换为sparse=False即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:57:03