【问题标题】:TypeError: unhashable typeTypeError:不可散列的类型
【发布时间】:2016-03-16 21:24:23
【问题描述】:

我写了一小段代码来使用 sklearn 进行线性回归。

我创建了一个 2 列 csv 文件(列名 X、Y 和一些数字)和 当我阅读文件时,我看到内容已正确读取 - 如下所示。

但是,当我尝试使用 datafile[:,:]datafile[:,-1] 等命令引用列时,出现“不可散列类型”错误。

当我尝试使用 X 作为响应,Y 作为 sklearn 线性回归中的预测变量时,我得到如下所示的值错误。

我在网上查看但无法弄清楚我的代码或文件有什么问题。请帮忙。

import pandas as pd
datafile=pd.read_csv('samplelinear.csv')
datafile

     X    Y    
0    0 1.440000 
1    1 33.220000 
. . . 

print datafile.__class__
<class 'pandas.core.frame.DataFrame'>

datafile[:,:]
TypeError: unhashable type

datafile[:,:1]
TypeError: unhashable type


from sklearn.linear_model import LinearRegression
model=LinearRegression()

model.fit(datafile.X,datafile.Y)
ValueError: Found arrays with inconsistent numbers of samples: [ 1 14]

【问题讨论】:

    标签: scikit-learn sklearn-pandas


    【解决方案1】:

    另一个对 pandas 数据框进行切片的较短选项是:

     data.ix[:,:1]
    

    【讨论】:

    • 这已被弃用,我认为支持 iloc 用于位置切片和 loc 用于基于标签的切片。
    • 感谢迈克尔的评论。这是准确的。
    【解决方案2】:

    如果您想使用切片语法从数据框中进行选择,您必须使用

    data.iloc[:,:1]
    

    对于第二个问题,X 输入需要是矩阵,而不是向量,因此要么包含更多列,要么使用以下语法:

    model.fit(pd.DataFrame(datafile.X), datafile.Y)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-27
      • 2019-01-29
      • 2012-02-19
      • 1970-01-01
      • 2018-12-26
      • 2020-10-07
      • 2017-08-01
      相关资源
      最近更新 更多