错误: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)