Python离散变量One-Hot编码实战:pandas与sklearn对比

Dylan
Dylan
发布时间:2026-10-13 | 3人浏览过
原创

本文详解Python中离散变量One-Hot编码的两种主流实现方式。通过对比pandas的get_dummies与sklearn的LabelEncoder结合OneHotEncoder,解析字符串与数值型变量的处理差异。文章包含具体代码示例,展示从数据导入、特征查看到编码生成的完整流程,帮助开发者根据数据类型选择合适方案。

在构建机器学习模型时,数据集中常包含离散型变量(如性别)。由于模型通常无法直接处理此类原始分类数据,预处理阶段需对其进行转换。One-Hot编码是处理离散变量的常用手段。本文将具体介绍在Python中实现离散变量One-Hot编码的方法。

本文提供两种哑编码(One-Hot编码)的实现路径:pandas库与sklearn库。两者的核心区别在于默认处理的数据类型不同:pandas默认针对字符串类型的类别变量进行处理,而sklearn默认针对数值型类别变量(若需处理字符串,需先通过LabelEncoder转换为数值)。

① pd.get_dummies(prefix=)

pandas库中的get_dummies()函数可直接对变量执行One-Hot编码。参数prefix用于为生成的新编码变量指定前缀命名,便于后续特征识别。

②LabelEncoder和OneHotEncoder

利用sklearn模块同样可实现离散变量的One-Hot编码。其中,LabelEncoder的作用是将离散变量映射为数字标签。

OneHotEncoder则负责对已转换为数字的离散变量执行One-Hot编码操作。

注意:get_dummies()支持直接对字符型变量进行编码,但OneHotEncoder不支持直接处理字符型变量,必须先将其转换为数值型。这正是在使用OneHotEncoder前必须引入LabelEncoder的原因。

下文将通过具体实例演示这两种方法的操作步骤。

①数据的导入

import pandas as pd
import os
os.getcwd() 
os.chdir('E:\study\kaggle\Titanic')
from sklearn.preprocessing import OneHotEncoder 
from sklearn.preprocessing import LabelEncoder 
data = pd.read_csv('train.csv')

②数据熟悉

data['Sex'].value_counts()
Out[38]: 
male  577
female 314
Name: Sex, dtype: int64 #可以看到,变量Sex为字符型变量,取值有male和female两种

③get_dummies

Sex_ohe_1 = pd.get_dummies(data['Sex'])
Sex_ohe_1.head()
Out[40]: 
 female male
0  0  1
1  1  0
2  1  0
3  1  0
4  0  1

④OneHotEncoder

Sex_ohe_2 = OneHotEncoder(sparse=False).fit_transform(data['Sex'].reshape((-1,1))) 
 
ValueError: could not convert string to float: male 

从代码执行结果可见,OneHotEncoder无法直接对字符型变量进行编码,报错提示涉及字符串转浮点数失败。因此,必须先将字符型变量通过LabelEncoder转换为数值型变量,再传入OneHotEncoder进行处理。

le_sex=LabelEncoder().fit(data['Sex']) 
Sex_label=le_sex.transform(data['Sex']) 
Sex_label= LabelEncoder().fit_transform(data['Sex']) #fit_transform等价于fit和transform两个函数结合
ohe_sex=OneHotEncoder(sparse=False).fit(Sex_label.reshape(-1,1)) 
Sex_ohe=ohe_sex.transform(Sex_label.reshape(-1,1)) 
Sex_ohe_3 = OneHotEncoder(sparse=False).fit_transform(Sex_label.reshape((-1,1)))

补充说明:get_dummies()的输出结果为DataFrame(数据框),而OneHotEncoder的输出结果为数组(Array)。

以上即为Python中离散变量One-Hot编码的完整方法介绍,供读者参考与实践。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表