【发布时间】:2020-06-29 18:59:51
【问题描述】:
我正在尝试通过对 sklearn 库中的一些分类数据进行热编码来预处理一些数据。
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# Importing the dataset
dataset = pd.read_csv('Churn_Modelling.csv')
X = dataset.iloc[:, 3:13].values
y = dataset.iloc[:, 13].values
# Encoding categorical data
from sklearn.preprocessing import OneHotEncoder
onehotencoder = OneHotEncoder(categories =X[:,1].reshape(-1,1))
如果一切顺利,我应该可以通过
对数据进行编码X = onehotencoder.fit_transform(X).toarray()
(对吗?) 但这引发了这个特殊的错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
有什么基本的我做的不对吗?我检查了文档 https://scikit-learn.org/0.20/modules/generated/sklearn.preprocessing.OneHotEncoder.html#sklearn.preprocessing.OneHotEncoder ,但这对我没有任何帮助...
我做错了什么基本的事情吗?我也很好奇为什么会弹出这个错误,我已经查过了,但我不明白它在这种情况下做了什么。 如果我需要提供更多信息,请告诉我。
为了明确数据集:我有十列我只想对国家/地区的分类值进行热编码(有三个:法国、德国和西班牙),其余列保存数值。
我想知道的一件事是,对于参数类别,是否应该传递希望编码的整个列,或者是否只提供具有不同值的数组?所以不是
onehotencoder = OneHotEncoder(categories =X[:,1].reshape(-1,1))
应该做类似的事情
onehotencoder = OneHotEncoder(categories = np.array(['France','Germany','Spain']).reshape(-1,1))
?
最后一次编辑:我只是尝试找到一种“快速”的方式对整个数据集中的特定列进行热编码。
我知道我总是可以取出我想要热编码的列,在该列上运行简单的代码,然后将其重新插入数据帧,我只是希望我能找到一些可以应用的代码许多不同的情况,只需极少的编辑。
编辑:添加数据集的打印屏幕: Example of the data set
【问题讨论】:
-
只需从 fit_transform 中删除 .toarray()
-
感谢您的回复。但是,即使我删除它,我也会遇到同样的错误
-
你能提供你的数据样本吗?你有缺失值吗?
-
你为什么要在 OneHotEncoder 中填写 categories 参数?如果您需要对所有类别进行编码,它将自动进行。您想具体转换哪些类别?
-
嗨,我有一个数值范围,性别类别,我可以使用标签对其进行编码并且不需要热编码,我要编码的唯一类别是“地理”类别,它可以只取法国、德国和西班牙的值。我填写了类别参数,因为如果我将其保留在“自动”上,它似乎会编码所有值,数字值当然也不是我想要的。我通过切片此列并按如下方式成功地对地理进行了热编码,但随后将它们再次插入数据集中会变得混乱......我将提供数据集的示例
标签: python scikit-learn one-hot-encoding