Python" TypeError:不可用类型:' slice'"用于编码分类数据

时间:2017-04-08 04:30:18

标签: python pandas numpy matplotlib

我正在

  

TypeError:不可用类型:' slice'

执行以下代码以在Python中编码分类数据时。有人可以帮忙吗?

# 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])

7 个答案:

答案 0 :(得分:82)

X是一个数据框,无法通过X[:, 3]等切片术语进行访问。您必须通过ilocX.values进行访问。但是,您构建X的方式使其成为副本......所以。我使用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])

答案 1 :(得分:6)

在创建变量X或编码时使用值,如上所述

# 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

答案 2 :(得分:4)

创建矩阵XY向量时使用values

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

这肯定会解决你的问题。

答案 3 :(得分:2)

如果在创建矩阵X和Y向量时使用.Values将会解决此问题。

y=dataset.iloc[:, 4].values

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

当您使用.Values时,它将创建一个创建的矩阵的Object表示,并且将删除轴。 检查下面的链接以获取更多信息

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.values.html

答案 4 :(得分:0)

我得到了同样的错误(TypeError:unhashable type:'slice'),代码如下:

included_cols = [2,4,10]
dataset = dataset[:,included_cols]  #Columns 2,4 and 10 are included.

通过在数据集之后放置iloc解决了以下代码:

included_cols = [2,4,10]
dataset = dataset.iloc[:,included_cols]  #Columns 2,4 and 10 are included.

答案 5 :(得分:0)

尝试通过将标签编码器中的X [:,3]更改为X.iloc [:,3]

答案 6 :(得分:-2)

您的x和y值未运行,因此首先您要开始写这一点

 import numpy as np
 import pandas as pd
 import matplotlib as plt

 dataframe=pd.read_csv(".\datasets\Position_Salaries.csv")

 x=dataframe.iloc[:,1:2].values 
 y=dataframe.iloc[:,2].values    
 x1=dataframe.iloc[:,:-1].values 

价值点已经发布

相关问题