2017-05-30 81 views
0

我想将列表附加到h5中的表格中。当直接追加数据时,就完成了;字段数量和阵列数量之间的不匹配

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') 

在这种情况下,我得到了相同的结果。它和上面一样。

+1

如果您的问题得到解决,这是不够标记是解决你的问题的答案。我们不会在标题中加入[解析]标签。 – ayhan

+0

感谢您的建议。 – Renke

回答

1

明白了,这是sarray的问题。

tarray = [] 
for s in sarray: 
    s=tuple(s) 
    tarray.append(s) 
+0

正确的,结构化数组(recarray)的数据是以元组或元组列表的形式存在的。 – hpaulj

+0

/(ㄒoㄒ)/ ~~我发现它可以在不转换sarray的情况下成功运行。我的意思是,表达式“tab2.append(rows = sarray)”起作用。哦!发生了什么? – Renke

0

所以我没有使用pytables很多,但根据那里的文档和示例,你只是传递数组。该错误“行参数不能转换成recarray”在我看来,像它试图通过行,试试:

tab2.append(tarray) 

我可能是非常错误的,但它可能只是简单的东西,你试试这个?

+0

是的,我试过这个,它报告了同样的错误。 – Renke