字段数和数组数不匹配
mismatch between the number of fields and the number of arrays
我想将列表附加到 h5 中的 table。当直接附加数据时,就完成了;
ts=[(datetime.date(2017, 5, 30), 233, 856, 0.2355, 1.17692), (datetime.date(2017, 5, 30), 192, 518, 1.27893, -0.60389)]
tab2.append(rows=ts)
从源附加数据时,
tab2.append(rows=tarray)
报错
"rows parameter cannot be converted into a recarray object compliant with table '/test (Table(4,)) 'TestTables''. The error was: <mismatch between the number of fields and the number of arrays>"
而 tarray 是从下面的表达式中得到的。
ran_int=np.random.randint(0,high=1000,size=(nrows,2))
ran_flo=np.random.standard_normal(size=(nrows,2)).round(5)
dty=np.dtype([('Date','M8[D]'),('No1','<i4'),('No2','<i4'),
('No3','<f8'),('No4','<f8')])
sarray=np.zeros(len(ran_int),dtype=dty)
sarray['Date']=datetime.datetime.now().date()
sarray['No1']=ran_int[:,0]
sarray['No2']=ran_int[:,1]
sarray['No3']=ran_flo[:,0]
sarray['No4']=ran_flo[:,1]
tarray=list(sarray)
我打印了ts,tarray和它们的类型,得到的信息如下。
[(datetime.date(2017, 5, 30), 866, 536, -0.83165, 0.50131), (datetime.date(2017, 5, 30), 14, 117, 2.11287, -1.09029)]
<class 'list'>
[(datetime.date(2017, 5, 30), 233, 856, 0.2355, 1.17692), (datetime.date(2017, 5, 30), 192, 518, 1.27893, -0.60389)]
<class 'list'>
不是日期时间的问题。
我尝试更改 dty
dty=np.dtype([('Date','S26'),('No1','<i4'),('No2','<i4'),
('No3','<f8'),('No4','<f8')])
和
sarray['Date']=datetime.datetime.now().strftime('%Y-%m-%d')
在这种情况下,我得到了相同的结果。同上
所以我没有经常使用 pytables,但根据那里的文档和示例,您只需传递数组。错误 "rows parameter cannot be converted into a recarray" 在我看来像是在尝试传递行,请尝试:
tab2.append(tarray)
我可能错得很厉害,但这可能只是一些简单的事情,你试过了吗?
明白了,是sarray的问题
tarray = []
for s in sarray:
s=tuple(s)
tarray.append(s)
我想将列表附加到 h5 中的 table。当直接附加数据时,就完成了;
ts=[(datetime.date(2017, 5, 30), 233, 856, 0.2355, 1.17692), (datetime.date(2017, 5, 30), 192, 518, 1.27893, -0.60389)]
tab2.append(rows=ts)
从源附加数据时,
tab2.append(rows=tarray)
报错
"rows parameter cannot be converted into a recarray object compliant with table '/test (Table(4,)) 'TestTables''. The error was: <mismatch between the number of fields and the number of arrays>"
而 tarray 是从下面的表达式中得到的。
ran_int=np.random.randint(0,high=1000,size=(nrows,2))
ran_flo=np.random.standard_normal(size=(nrows,2)).round(5)
dty=np.dtype([('Date','M8[D]'),('No1','<i4'),('No2','<i4'),
('No3','<f8'),('No4','<f8')])
sarray=np.zeros(len(ran_int),dtype=dty)
sarray['Date']=datetime.datetime.now().date()
sarray['No1']=ran_int[:,0]
sarray['No2']=ran_int[:,1]
sarray['No3']=ran_flo[:,0]
sarray['No4']=ran_flo[:,1]
tarray=list(sarray)
我打印了ts,tarray和它们的类型,得到的信息如下。
[(datetime.date(2017, 5, 30), 866, 536, -0.83165, 0.50131), (datetime.date(2017, 5, 30), 14, 117, 2.11287, -1.09029)]
<class 'list'>
[(datetime.date(2017, 5, 30), 233, 856, 0.2355, 1.17692), (datetime.date(2017, 5, 30), 192, 518, 1.27893, -0.60389)]
<class 'list'>
不是日期时间的问题。 我尝试更改 dty
dty=np.dtype([('Date','S26'),('No1','<i4'),('No2','<i4'),
('No3','<f8'),('No4','<f8')])
和
sarray['Date']=datetime.datetime.now().strftime('%Y-%m-%d')
在这种情况下,我得到了相同的结果。同上
所以我没有经常使用 pytables,但根据那里的文档和示例,您只需传递数组。错误 "rows parameter cannot be converted into a recarray" 在我看来像是在尝试传递行,请尝试:
tab2.append(tarray)
我可能错得很厉害,但这可能只是一些简单的事情,你试过了吗?
明白了,是sarray的问题
tarray = []
for s in sarray:
s=tuple(s)
tarray.append(s)