手动转化excel数据为符合网络输入格式的npy文件

错误:ValueError: too many values to unpack (expected 3)

运行新的代码,将我的数据转化为npy格式然后修改了路径,运行报这个错误ValueError: too many values to unpack (expected 3)参考博客,这个错误一般是元素赋值数量不对等造成的,找到报错位置:(这里有两个数组,一个元组)

data_, label_, (length, input_size) = np.load(filepath, allow_pickle=True)#读取npy文件赋值

我使用的转化代码为:(这个是直接转化的)

import pandas as pd
import numpy as np

# 先用pandas读入csv
m= pd.read_csv("MY/105_10.csv");
# 再使用numpy保存为npy
np.save("MY/105_10.npy", m);

对于元组列表不是很了解,于是查阅资料编写了元组、列表基础介绍,对这些有了基础的认识之后

我打印源代码的npy文件,发现他是有格式的shape的值为(3,),和前面的值是对应的,其中2678是数据的条数,8是每条数据的维度,data和label的数据量是相同的2678:
在这里插入图片描述
只需要将我的数据转化为相同的格式就可以了。

新建一个python文件,将如何创建对应的npy文件的逻辑理清楚。参考博客代码如下:

a=[[1,2,3],[2,3,4]]
b=[1,0,1]
total=[]
total.append(a)
total.append(b)
total.append((12,6))

np.save('./data/text.npy',total)
a1,a2=[],[]
r=np.load('./data/text.npy',allow_pickle=True)#allow_pickle=True这句是必须的,否则要报错
print(r)  #[list([[1, 2, 3], [2, 3, 4]]) list([1, 0, 1]) (12, 6)]
a1,a2,(len,wid)=np.load('./data/text.npy',allow_pickle=True)

没有报错,但是类型为list和array不太一样,先试试将我的excel的数据按照上面的思路转化为同样的格式。

对于数据data属于多行多列的数据,取值的代码如下:

import csv
total=[]
with open('I:\\代码\\数据\\修改的数据\\8-2_27-28_产气.csv','r') as myFile:
    lines=csv.reader(myFile)
    for line in lines:
       total.append(list(map(float,list(line))))#多行多列的数据

安装xlrd包的命令:pip install xlrd

对于标签label是一列的数据,参考博客取值的代码如下:

l=list(xlrd.open_workbook("I:\\代码\\数据\\修改的数据\\8-2_27-28_产气_标签.xlsx").sheets()[0].col_values(0))
label=list(map(int,l))#转化为int类型
print(label)#[0, 0, 0, 0, 0, 0, 0,..., 1, 1, 1, 1, 1]

报错:xlrd.biffh.XLRDError: Excel xlsx file; not supported参考博客,发现是xlrd的版本太高,只支持.xls文件,安装旧版xlrd:

pip uninstall xlrd
pip install xlrd==1.2.0

在这里插入图片描述
完整代码如下:

import numpy as np
import csv # 读取csv文件
import xlrd  #读取xlsx文件
total=[]
label=[]

#多行多列的数据
with open('I:\\代码\\数据\\修改的数据\\8-2_27-28_产气.csv','r') as myFile:
    lines=csv.reader(myFile)
    for line in lines:
       total.append(list(map(float,list(line))))
y=len(total[0])  #维度27
x=len(total)  #条数39887

#一列的标签数据
l=list(xlrd.open_workbook("I:\\代码\\数据\\修改的数据\\8-2_27-28_产气_标签.xlsx").sheets()[0].col_values(0))
label=list(map(int,l))

result=[]
result.append(total)
result.append(label)
result.append((x,y))

np.save('./data/8-2_27-28_q.npy',result)

在这里插入图片描述
然后将我转化的npy文件,运行试试,没有报错了,按照这个代码将我的数据全部转化。

将excel数据转化为训练集、测试集、验证集的npy文件

import numpy as np
import csv # 读取csv文件
import xlrd  #读取xlsx文件

test_total=[]
train_total=[]
vaild_total=[]

test_label=[]
train_label=[]
vaild_label=[]


with open('I:\\代码\\数据\\修改的数据\\105_11_出水.csv','r') as myFile:
   lines=list(csv.reader(myFile))  #把获取的数据转化为列表
   num=len(lines)  #总的行数

   #按照2:2:6划分测试集、验证集、训练集
   test_num=int(num*0.2)  #int(num)向下取整,math.ceil(num)向下取整,round(num)四舍五入,math.modf(num),分别取整数部分和小数部分
   vaild_num=test_num 
   train_num=num-test_num*2  #剩下的部分全部作为训练集


   for i in range(train_num):
      train_total.append(lines[i])

   for i in range(train_num,train_num+test_num):
      test_total.append(lines[i])

   for i in range(train_num+test_num,num):
      vaild_total.append(lines[i])

   y=len(lines[0])  #维度27

   #一列的标签数据
   l=list(xlrd.open_workbook("I:\\代码\\数据\\修改的数据\\105_11_出水_标签.xlsx").sheets()[0].col_values(0))
   label=list(map(int,l))

   for j in range(train_num):
      train_label.append(label[i])

   for j in range(train_num,train_num+test_num):
      test_label.append(label[i])

   for j in range(train_num+test_num,num):
      vaild_label.append(label[i])

   train_result=[]
   train_result.append(train_total)
   train_result.append(train_label)
   train_result.append((train_num,y))

   test_result=[]
   test_result.append(test_total)
   test_result.append(test_label)
   test_result.append((test_num,y))

   vaild_result=[]
   vaild_result.append(vaild_total)
   vaild_result.append(vaild_label)
   vaild_result.append((vaild_num,y))  #条数和维度

   np.save('I:\\代码\\数据\\npy文件\\训练集\\train_105_11_s.npy',train_result)  #存储
   np.save('I:\\代码\\数据\\npy文件\\测试集\\test_105_11_s.npy',test_result)
   np.save('I:\\代码\\数据\\npy文件\\验证集\\valid_105_11_s.npy',vaild_result)

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值