oneHotEncoding 的问题

数据挖掘 Python scikit-学习 预处理
2021-10-02 10:23:21

所以我有一个 PandasDataFrame,列中有分类变量,我想要一个热编码我使用了 ML udemy 课程中的以下代码

from sklearn.preprocessing import OneHotEncoder
onehotencoder=OneHotEncoder(categorical_features=[10])
Y= onehotencoder.fit_transform(X).toarray()

但是我收到以下错误

ValueError: could not convert string to float:

使用 df 将一点信息 Y 转换为对象

Y=df.iloc[:,:].values

我想对包含字符串值的 y 的第 10 列进行 oneHotencode。变量资源管理器中 Y 的类型是对象,如果执行

type(Y)

我得到 numpy.ndarray

我是 Pandas 和 sklearn 的新手,非常感谢任何帮助。

4个回答

有一种在 pandas 中使用热编码的简单方法,您可以在以下链接中了解它:

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html

get_dummies方法很简单,并且针对在 pandas 数据帧中的使用进行了优化。

祝你好运!

这可能是一个迟到的答案,但我遇到了同样的问题,下面是解决方案

# Don't use categorical_features=[10] in encoder init
from sklearn.preprocessing import OneHotEncoder
onehotencoder=OneHotEncoder()
Y= onehotencoder.fit_transform(X[:,[10]]).toarray()

你需要两个步骤:

  1. 用于LabelEncoder将字符串变量编码为整数
  2. 然后OneHotEncoder在你的整数变量上使用

你可以只使用一个LabelBinarizer. 标签二值化器将跳过DontDivideByZero提到的两步过程(将字符串转换为整数,然后将整数转换为浮点数)

from sklearn.preprocessing import labelBinarizer
encoder = LabelBinarizer()
Y = encoder.fit_transform(X)

这样您将转换整个X矩阵,但稍后您可以很容易地提取Y[10]出您正在寻找的一个热编码矩阵。