2017-05-30 82 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