Python "TypeError: unhashable type: 'slice'" 用于编码分类数据

Posted

技术标签:

【中文标题】Python "TypeError: unhashable type: \'slice\'" 用于编码分类数据【英文标题】:Python "TypeError: unhashable type: 'slice'" for encoding categorical dataPython "TypeError: unhashable type: 'slice'" 用于编码分类数据 【发布时间】:2017-09-03 13:13:58 【问题描述】:

我来了

TypeError: unhashable type: '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])

【问题讨论】:

csv 文件中有什么?你在哪一行得到了 TypeError? 请将相应的堆栈跟踪添加到您的问题中。 告诉使用dataset?我怀疑它的“iloc”需要一个字符串列标签,而不是像切片这样的二维数组。该错误意味着 slice(例如 0:4)被用作字典键或类似的东西。 【参考方案1】:

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

【讨论】:

【参考方案2】:

在创建变量 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

【讨论】:

【参考方案3】:

在创建矩阵XY 向量时使用values

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

绝对能解决你的问题。

【讨论】:

嗨,我很好奇TypeError: unhashable type: 'slice'的原因?【参考方案4】:

如果您在创建矩阵 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

【讨论】:

【参考方案5】:

我遇到了同样的错误(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.

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

你的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 

价值点已发布

【讨论】:

以上是关于Python "TypeError: unhashable type: 'slice'" 用于编码分类数据的主要内容,如果未能解决你的问题,请参考以下文章

Python "for loop and def" 练习并得到 "TypeError: 'int' object is not iterable"

python"TypeError: 'NoneType' object is not iterable"错误解析

python报"TypeError: object of type 'Greenlet' has no len()"

“TypeError:'WebElement'对象不可迭代”错误代码python爬取

请教:python脚本得到“TypeError: a float is required”错误

(Python 新手)不断收到“TypeError: 'int' object is not callable”