2013-07-15 57 views
1

我有一些數據將包含許多可以用任意長度的數組描述的屬性(例如,一個對象可以包含一些數量的簇,我想存儲每個組成部分的大小羣集作爲列,但原則上,每個對象的羣集數量範圍可以從0到\ infty。有沒有辦法在Pandas數據框中支持任意長度的數組作爲列數據?我意識到我可以使用一個面板,但是AFAIK需要知道面板的深度(原則上,我在加載數據之前我不知道),另外面板可能非常稀疏,因爲在該示例中,許多對象可能只有很少的簇。Pandas列中的多維數組

如果我只是使用dtype = object的numpy數組,會不會對H5Store中或Pandas選擇或其他內容的存儲有什麼影響?

+1

難道你不能添加一個名爲'cluster_id'的列並將其全部存儲在一個簡單的數據框中嗎? – user1827356

+0

嗯,你的意思是一列可以包含數據幀?這是否有任何性能影響?我在某處讀到,使用numpy.array作爲列數據不會允許某些Pandas優化,但如果數據框不是列數據,那麼太棒了! –

+0

如果您爲每個具有列['A','B','C']的集羣擁有一個數據框,並將它們與列['ID','A','B','C']合併爲一個新的數據框,其中ID是每個羣集的唯一標識符。因此,您將擁有「一個」巨大的數據框(沒有列包含數據框),其中每個集羣都有多行。如果需要,我可以發佈更詳細的解釋作爲回答 – user1827356

回答

0

而是改變每個對象中的列數的你將有不同數量的行每對象

pd.DataFrame({'ClusterID' : '1a,1b,2a,2b,2c,2d,3a'.split(','), 'ObjectID' : [1,1,2,2,2,2,3]}) 
    ObjectID ClusterID 
0  1   1a 
1  1   1b 
2  2   2a 
3  2   2b 
4  2   2c 
5  2   2d 
6  3   3a 

如果每個集羣具有多個屬性,你可以如下它們存儲在一個單獨的表。這將允許多個對象共享羣集而不必複製數據

pd.DataFrame({'ClusterID' : '1a,1b,2a,2b,2c,2d,3a'.split(','), 'ClusterAttr-1' : 'Attr-1', 'ClusterAttr-2' : 'Attr-2'}) 
    ClusterID ClusterAttr-1 ClusterAttr-2 
0  1a  Attr-1  Attr-2 
1  1b  Attr-1  Attr-2 
2  2a  Attr-1  Attr-2 
3  2b  Attr-1  Attr-2 
4  2c  Attr-1  Attr-2 
5  2d  Attr-1  Attr-2 
6  3a  Attr-1  Attr-2