2017-04-08 136 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 

它一定會解決您的問題。