2017-04-08 138 views
9

在Python中编码分类数据执行下面的代码时收到蟒“类型错误:unhashable类型:‘切片’”用于编码分类数据

TypeError: unhashable type: 'slice'

。任何人都可以帮忙吗?

# Importing the libraries 
import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 

# Importing the dataset 
dataset = pd.read_csv('50_Startups.csv') 
y=dataset.iloc[:, 4] 
X=dataset.iloc[:, 0:4] 

# Encoding categorical data 
from sklearn.preprocessing import LabelEncoder, OneHotEncoder 
labelencoder_X = LabelEncoder() 
X[:, 3] = labelencoder_X.fit_transform(X[:, 3]) 
+2

什么是在csv文件?你在哪一行得到TypeError? –

+1

请将相应的堆栈跟踪添加到您的问题。 –

+0

讲述关于'dataset'的用法吗?我怀疑它的'iloc'期望一个字符串列标签,而不是像切片那样的2d数组。这个错误意味着'slice'(例如0:4)被用作字典键,或者类似的东西。 – hpaulj

回答

23

X是一个数据帧,并且不能经由切片术语像X[:, 3]进行访问。您必须通过ilocX.values访问。然而,你构造的方式X使它成为一个副本...所以。要么同时创造变量X I最好使用values

# Importing the libraries 
import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 

# Importing the dataset 
# dataset = pd.read_csv('50_Startups.csv') 

dataset = pd.DataFrame(np.random.rand(10, 10)) 
y=dataset.iloc[:, 4] 
X=dataset.iloc[:, 0:4] 

# Encoding categorical data 
from sklearn.preprocessing import LabelEncoder, OneHotEncoder 
labelencoder_X = LabelEncoder() 

# I changed this line 
X.values[:, 3] = labelencoder_X.fit_transform(X.values[:, 3]) 
0

使用价值或而编码如上

# Importing the libraries 
import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 

# Importing the dataset 
# dataset = pd.read_csv('50_Startups.csv') 

dataset = pd.DataFrame(np.random.rand(10, 10)) 
y=dataset.iloc[:, 4].values 
X=dataset.iloc[:, 0:4].values 
1

提到在创建矩阵XY矢量使用values

X=dataset.iloc[:,4].values 
Y=dataset.iloc[:,0:4].values 

它一定会解决您的问题。