类型错误从SciKit-学习的LabelEncoder

问题描述 投票:1回答:2

这里是我的代码:

#Importing the dataset
dataset = pd.read_csv('insurance.csv')
X = dataset.iloc[:, :-2].values
X = pd.DataFrame(X)

#Encoding Categorical data
from sklearn.preprocessing import LabelEncoder
labelencoder_X = LabelEncoder()
X[:, 1:2] = labelencoder_X.fit_transform(X[:, 1:2])

样本数据集

    age sex bmi children    smoker  region  charges
19  female  27.9    0   yes southwest   16884.924
18  male    33.77   1   no  southeast   1725.5523
28  male    33  3   no  southeast   4449.462
33  male    22.705  0   no  northwest   21984.47061
32  male    28.88   0   no  northwest   3866.8552
31  female  25.74   0   no  southeast   3756.6216
46  female  33.44   1   no  southeast   8240.5896
37  female  27.74   3   no  northwest   7281.5056
37  male    29.83   2   no  northeast   6406.4107
60  female  25.84   0   no  northwest   28923.13692

当运行labelencoder,我收到以下错误

文件 “E:\ Anaconda2 \ LIB \站点包\大熊猫\核心\ generic.py”,线1840,在_get_item_cache RES = cache.get(项目)类型错误:unhashable类型

这可能是造成这个错误?

python pandas scikit-learn
2个回答
0
投票

你的问题是,你想标记编码切片。

步骤来重现你的错误:

df = pd.DataFrame({"score":[0,1],"gender":["male","female"]})
enc = LabelEncoder()
enc.fit_transform(df[:,1:2])
...
TypeError: unhashable type: 'slice'

尝试,而不是访问栏正确,让你喂LabelEncoder形状(N_SAMPLES次)的类似阵列的类型:numpy的阵列,列表,熊猫系列(见docs)。

证明:

enc.fit_transform(df["gender"])
array([1, 0])

最后,如果你想你的变异df,大意如下的东西会做:

for col in df.select_dtypes(include="object").columns:
    df[col] = enc.fit_transform(df[col])

0
投票

这里是一个小的演示:

In [36]: from sklearn.preprocessing import LabelEncoder

In [37]: le = LabelEncoder()

In [38]: X = df.apply(lambda c: c if np.issubdtype(df.dtypes.loc[c.name], np.number) 
                                  else le.fit_transform(c))

In [39]: X
Out[39]:
   age  sex     bmi  children  smoker  region      charges
0   19    0  27.900         0       1       3  16884.92400
1   18    1  33.770         1       0       2   1725.55230
2   28    1  33.000         3       0       2   4449.46200
3   33    1  22.705         0       0       1  21984.47061
4   32    1  28.880         0       0       1   3866.85520
5   31    0  25.740         0       0       2   3756.62160
6   46    0  33.440         1       0       2   8240.58960
7   37    0  27.740         3       0       1   7281.50560
8   37    1  29.830         2       0       0   6406.41070
9   60    0  25.840         0       0       1  28923.13692

来源DF:

In [35]: df
Out[35]:
   age     sex     bmi  children smoker     region      charges
0   19  female  27.900         0    yes  southwest  16884.92400
1   18    male  33.770         1     no  southeast   1725.55230
2   28    male  33.000         3     no  southeast   4449.46200
3   33    male  22.705         0     no  northwest  21984.47061
4   32    male  28.880         0     no  northwest   3866.85520
5   31  female  25.740         0     no  southeast   3756.62160
6   46  female  33.440         1     no  southeast   8240.58960
7   37  female  27.740         3     no  northwest   7281.50560
8   37    male  29.830         2     no  northeast   6406.41070
9   60  female  25.840         0     no  northwest  28923.13692
© www.soinside.com 2019 - 2024. All rights reserved.