首页 > 解决方案 > 我遇到了 OnehotEncoder 的问题

问题描述

这是代码:

import numpy as np
import pandas as pd


dataset = pd.read_csv('googleplaystore.csv')

X = dataset.iloc[:, :3].values

from sklearn.preprocessing import LabelEncoder, OneHotEncoder


labelencoder = LabelEncoder()


X[:, 1] = labelencoder.fit_transform(X[:, 1])


onehotencoder = OneHotEncoder(categorical_features = [1])


X = onehotencoder.fit_transform(X).toarray()

ValueError:无法将字符串转换为浮点数:'iHoroscope - 2018 年每日星座运势和占星术'

这是 csv 文件的链接:https ://drive.google.com/file/d/1Z3uT_tU9QsdE8QSBd8husItHeh36ztZa/view?usp=drivesdk

标签: pythonscikit-learn

解决方案


categorical_features0.20 版以来已弃用(并将在 0.22 版中删除)scikit-learn建议您改用ColumnTransformer

这只是将不同的变压器应用于不同的列的一种便捷方式。

因此,您可以使用以下方法对列进行一次热编码ColumnTransformer

from sklearn.compose import ColumnTransformer

#Specify what you want to do, and provide column index
ct = ColumnTransformer([('ohe', OneHotEncoder(), [1])])

ohe_category = ct.fit_transform(X)  

这为您提供了一个单热编码的稀疏矩阵。您可以将其转换为dense

ohe_category.todense()

也就是说,我建议您继续使用pd.get_dummies(正如@JonasCristens 所提到的),因为它使用起来要简单得多:

pd.get_dummies(dataset['Category'])

推荐阅读