神经网络使用DataLoader迭代数据的时候报错KeyEorror

我在进行LSTM网络模型训练的时候,dataloader迭代时候报错KeyEorror:7458
这里出现问题
当我看回溯的时候,我发现问题是出现在dataloader这里,再追溯根源,出现在__getitem__的这个方法里面
报错在dataloader
这段代码是在我创建的子类Dataset

知道问题的来源,我就开始去试着从源头去解决问题,对于这个数据的预处理,我是自己定义了一个类Dataset的子类来让dataloader可以直接对数据进行迭代
这里是我自己定义的Dataset子类,方便对数据进行处理
从这段代码可以看到在__getitem__方法中,对于text_array的迭代是没有问题,但是对于label_array的迭代是有问题,为什么会这样呢?抱着这个问题,我开始寻找两个数据的区别,经过我不断调试和观察我终于找到问题所在
这里是我传进去的text_array
这是我传进去的text_array
这里是我传进去的label_array
这里是我穿进去的labels数据
大家有发现什么区别没,对!一个是np数据,一个是pandas数据的series类型。回到我创建的Dataset子类

可以看到我的__getitem__中无论是对np数据,还是pd数据,我都是用data[]的方式对数据进行迭代,这样子是有问题,牵扯到python的基础语法。

对于pd.series数据

对于pd.series数据,它是有两部分组成。一个是索引,一个是值(类似于字典中键值对形式),当我用data[]的方式去迭代的时候,它是按照索引对应去迭代的,也就是说我之前的报错KeyError:3571是因为在我的pd数据中没有3571这样的索引值。
在这里插入图片描述
如果我想要取下标为2的数据,就会报错KeyError:3571
在这里插入图片描述

对于np数据(数组)

np数据,没有类似于pd.series数据的索引和值。它只有值,或者说它的索引就是它的下标。简单来说,就是一个数组,所以它可以直接按照下标取值。
在这里插入图片描述

解决办法(两种)
  1. 将pd数据转为 np数据
s=s.values #取走pd数据中的值,得到的就是np数据了

在这里插入图片描述

  1. 用data.iloc[]格式对pd数据进行取值,同样可以不按照pd数据索引进行取值,可以按照下标进行取值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值