【问题标题】: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)被用作字典键或类似的东西。

标签: python pandas numpy matplotlib


【解决方案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 
            

            价值点已发布

            【讨论】:

              猜你喜欢
              • 2018-08-12
              • 1970-01-01
              • 2019-04-17
              • 1970-01-01
              • 1970-01-01
              • 2015-02-11
              • 2020-05-11
              • 2022-08-11
              • 2021-12-30
              相关资源
              最近更新 更多