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

如何用Scikit-learn和Pandas将编码列拼接至原始DataFrame

嘿,作为新手能想到用编码处理文本数据已经很棒啦!我来一步步教你怎么把编码后的列拼回原始DataFrame,分LabelEncoder和OneHotEncoder两种情况给你讲清楚~


一、用LabelEncoder编码并拼接

LabelEncoder会把每个类别映射成一个整数,适合有序分类变量(比如成绩:差、中、优)。步骤如下:

1. 导入需要的库

import pandas as pd
from sklearn.preprocessing import LabelEncoder

2. 读取你的CSV文件

df = pd.read_csv('你的文件路径.csv')  # 替换成你的实际文件路径

3. 找出所有object类型的列

object_cols = df.select_dtypes(include=['object']).columns

4. 编码并拼接列

循环处理每个object列,生成编码后的新列并添加到原DataFrame中:

le = LabelEncoder()
for col in object_cols:
    # 给编码列起个新名字,比如原列名+_encoded
    df[f"{col}_encoded"] = le.fit_transform(df[col])

执行完后,原DataFrame里就会多出每个object列对应的编码列,原列会被保留。如果想直接替换原列,把代码改成df[col] = le.fit_transform(df[col])即可。


二、用OneHotEncoder编码并拼接

OneHotEncoder会把每个类别拆成单独的二进制列,适合无序分类变量(比如颜色:红、蓝、绿),避免模型误以为类别有顺序关系。

1. 导入库

import pandas as pd
from sklearn.preprocessing import OneHotEncoder

2. 编码并拼接

# 初始化OneHotEncoder,sparse_output=False让输出是数组(方便转DataFrame),drop='first'可选(避免多重共线性)
ohe = OneHotEncoder(sparse_output=False, drop='first')

# 对所有object列进行编码
encoded_data = ohe.fit_transform(df[object_cols])

# 获取编码后的列名(比如原列是"color",会生成"color_red"、"color_blue"这类名字)
encoded_col_names = ohe.get_feature_names_out(object_cols)

# 把编码结果转成DataFrame,要和原df保持相同的索引
encoded_df = pd.DataFrame(encoded_data, columns=encoded_col_names, index=df.index)

# 拼接原df和编码后的df
final_df = pd.concat([df, encoded_df], axis=1)

# 如果想删除原object列,可加这行:
# final_df = final_df.drop(object_cols, axis=1)

三、更简洁的方法:用ColumnTransformer一步到位

如果你不想手动拆分、编码、拼接,ColumnTransformer可以帮你一次性处理所有列(指定哪些列编码,哪些列保留原样),新手用这个不容易出错:

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

# 定义转换器规则:对object列用OneHotEncoder,其他列直接保留
ct = ColumnTransformer(
    transformers=[
        ('onehot', OneHotEncoder(sparse_output=False, drop='first'), object_cols)
    ],
    remainder='passthrough'  # 保留非object类型的原列
)

# 执行转换,得到处理后的数组
transformed_data = ct.fit_transform(df)

# 获取所有列名(编码列+原非object列)
all_col_names = ct.get_feature_names_out()

# 转成最终的DataFrame
final_df = pd.DataFrame(transformed_data, columns=all_col_names)

新手注意点

  • 处理前先检查数据是否有缺失值:LabelEncoder和OneHotEncoder都不能处理缺失值,需要先填充(比如df.fillna('未知', inplace=True))或删除缺失行。
  • 根据变量类型选编码方式:有序变量用LabelEncoder,无序变量用OneHotEncoder,别搞混啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:46:49