使用ScikitLearn OneHotEncoder和Pandas数据帧

2024-06-28 15:13:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用scikitlearn的onehotcoder将Pandas数据帧中包含字符串的列替换为一个热编码的等效列。我下面的代码不起作用:

from sklearn.preprocessing import OneHotEncoder
# data is a Pandas DataFrame

jobs_encoder = OneHotEncoder()
jobs_encoder.fit(data['Profession'].unique().reshape(1, -1))
data['Profession'] = jobs_encoder.transform(data['Profession'].to_numpy().reshape(-1, 1))

它会产生以下错误(列表中的字符串被省略):

^{pr2}$

以下是一些示例数据:

data['Profession'] =

0         unkn
1         safe
2         rece
3         unkn
4         lead
          ... 
111988    indu
111989    seni
111990    mess
111991    seni
111992    proj
Name: Profession, Length: 111993, dtype: object

我到底做错了什么?在


Tags: 数据字符串代码pandas编码encoderdatajobs
2条回答

因此,Scikit学习到的LabelBinarizer让我在将数据转换为一种热编码格式方面有了更好的运气,在{a2}的帮助下,我的最终代码如下

import pandas as pd
from sklearn.preprocessing import LabelBinarizer

jobs_encoder = LabelBinarizer()
jobs_encoder.fit(data['Profession'])
transformed = jobs_encoder.transform(data['Profession'])
ohe_df = pd.DataFrame(transformed)
data = pd.concat([data, ohe_df], axis=1).drop(['Profession'], axis=1)

OneHotEncoder将分类整数特征编码为一个热的数字数组。如果sparse=True,则该方法返回稀疏矩阵,否则返回二维数组。 你不能将一个二维数组(或稀疏矩阵)转换成一个熊猫系列。必须为每个类别创建Pandas系列(Pandas数据帧中的列)。在

我建议使用pandas.get_dummies代替:

data = pd.get_dummies(data,prefix=['Profession'], columns = ['Profession'], drop_first=True)

编辑:

使用Sklearn OneHotEncoder:

^{pr2}$

其他选项:如果使用GridSearch进行超参数调整,建议使用ColumnTransformer和{a5}与{a6}一起使用,或直接使用make_column_transformer

相关问题 更多 >