代码如下:
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:无法将字符串转换为float:'iHoroscope-2018 每日星座与占星术”
以下是指向csv文件的链接:https://drive.google.com/file/d/1Z3uT_tU9QsdE8QSBd8husItHeh36ztZa/view?usp=drivesdk
答案 0 :(得分:0)
尝试按照以下答案使用DictVectorizer:https://stackoverflow.com/a/33010943/10548514。至于直接处理涉及OneHotEncoder的问题:
在运行代码时,它没有使用正确的列进行一键编码(不推荐使用categorical_features
),因此在进行标签编码后,一种快速而肮脏的解决方案是将转换专门应用于所需的列(需要重塑):
onehotencoder = OneHotEncoder(categories='auto')
y = onehotencoder.fit_transform(X[:, 1].reshape(-1, 1))
答案 1 :(得分:0)
由于categorical_features
自0.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'])