请帮帮我,我正在运行下面的代码对一列进行独热编码,然后我想将这列添加到我的数据集中,接着运行K-means,但当我传递信息时,我使用了tolist()来适应这列,在运行K-means时,我遇到了以下问题:ValueError: setting an array element with a sequence。我对此进行了一些搜索,但没有找到明确的解决方案…
我使用了45列,首先我将它们放入一个DataFrame中,但如果我能将每列放入一个数组中会更有意思。
from sklearn.preprocessing import OneHotEncoderencoder = OneHotEncoder(sparse=True)SP_results_one_hot0 = encoder.fit_transform(SP_results_Array[:,0].reshape(-1,1))SP_results_one_hot1 = encoder.fit_transform(SP_results_Array[:,1].reshape(-1,1))SP_results_one_hot2 = encoder.fit_transform(SP_results_Array[:,2].reshape(-1,1))SP_results_one_hot3 = encoder.fit_transform(SP_results_Array[:,3].reshape(-1,1))SP_results_one_hot4 = encoder.fit_transform(SP_results_Array[:,4].reshape(-1,1))SP_results_one_hot5 = encoder.fit_transform(SP_results_Array[:,5].reshape(-1,1))SP_results_one_hot6 = encoder.fit_transform(SP_results_Array[:,6].reshape(-1,1))SP_results_one_hot7 = encoder.fit_transform(SP_results_Array[:,7].reshape(-1,1))SP_results_one_hot8 = encoder.fit_transform(SP_results_Array[:,8].reshape(-1,1))SP_results_one_hot9 = encoder.fit_transform(SP_results_Array[:,9].reshape(-1,1))SP_results["Division Vendedor"] = SP_results_one_hot0.toarray().tolist()SP_results["Tiempo en la Empresa"] = SP_results_one_hot1.toarray().tolist()SP_results["Id Supervisor"] = SP_results_one_hot2.toarray().tolist()SP_results["ID Region"] = SP_results_one_hot3.toarray().tolist()SP_results["cargo"] = SP_results_one_hot4.toarray().tolist()SP_results["address"] = SP_results_one_hot5.toarray().tolist()SP_results["Idad"] = SP_results_one_hot6.toarray().tolist()SP_results["sexo"] = SP_results_one_hot7.toarray().tolist()SP_results["Nacion"] = SP_results_one_hot8.toarray().tolist()SP_results["Tipo de vendedor"] = SP_results_one_hot9.toarray().tolist()features =SP_resultsfrom sklearn.cluster import KMeans km = KMeans(n_clusters=i) clusters = km.fit(features)ValueError: setting an array element with a sequence.
回答:
你可以使用get_dummies
并定义columns
列表来处理,而不是单独处理每列。以下是一个示例:
import pandas as pdcol_list = ["A","B","C"]# data是pandas数据框架data_new = pd.get_dummies(data, col_list)
由于kmean
需要input
以array
格式提供。你可以这样做:
km = KMeans(n_clusters=i)# data_new.values将数据框架转换为数组clusters = km.fit(data_new.values)
希望这对你有帮助。
参考资料: