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]
这样的切片术语访问。您必须通过iloc
或X.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】:在创建矩阵X
和Y
向量时使用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爬取