2014-06-27 177 views
1

我有一個龐大的時間序列函數存儲在一個HDF5商店的熊貓數據框中,我想繪製時間序列中每個函數的特定變換圖。由於地塊的數量非常大,並且繪製它們需要很長時間,所以我使用了fork()numpy.array_split()來打破索引並且同時運行多個地塊。如何分配熊貓數據框?

這樣做是指每個進程都有整個時間序列的副本。既然限制了我可以運行的進程的數量是我使用的內存總量,我希望能夠讓每個進程只存儲它自己的數據幀塊。

如何拆分熊貓數據框?

+0

你的意思是HDF5店? – Jeff

+0

HDF5存儲只有一個對象,熊貓數據框。我會稍微糾正一下「HDF Store」的錯字。 – Dan

+0

你應該把你的數據分成幾個較小的框架,並把它們寫入相同的(或不同的商店)。他們可以被多個進程讀取(但只能從最終進程中讀取!) – Jeff

回答

5

np.array_split對於這個用例非常有效。

[40]: df = DataFrame(np.random.randn(5,10)) 

In [41]: df 
Out[41]: 
      0   1   2   3   4   5   6   7   8   9 
0 -1.998163 -1.973708 0.461369 -0.575661 0.862534 -1.326168 1.164199 -1.004121 1.236323 -0.339586 
1 -0.591188 -0.162782 0.043923 0.101241 0.120330 -1.201497 -0.108959 -0.033221 0.145400 -0.324831 
2 0.114842 0.200597 2.792904 0.769636 -0.698700 -0.544161 0.838117 -0.013527 -0.623317 -1.461193 
3 1.309628 -0.444961 0.323008 -1.409978 -0.697961 0.132321 -2.851494 1.233421 -1.540319 1.107052 
4 0.436368 0.627954 -0.942830 0.448113 -0.030464 0.764961 -0.241905 -0.620992 1.238171 -0.127617 

只是漂亮打印,因爲你在這裏得到3個元素的列表。

In [43]: for dfs in np.array_split(df,3,axis=1): 
    ....:  print dfs, "\n" 
    ....:  
      0   1   2   3 
0 -1.998163 -1.973708 0.461369 -0.575661 
1 -0.591188 -0.162782 0.043923 0.101241 
2 0.114842 0.200597 2.792904 0.769636 
3 1.309628 -0.444961 0.323008 -1.409978 
4 0.436368 0.627954 -0.942830 0.448113 

      4   5   6 
0 0.862534 -1.326168 1.164199 
1 0.120330 -1.201497 -0.108959 
2 -0.698700 -0.544161 0.838117 
3 -0.697961 0.132321 -2.851494 
4 -0.030464 0.764961 -0.241905 

      7   8   9 
0 -1.004121 1.236323 -0.339586 
1 -0.033221 0.145400 -0.324831 
2 -0.013527 -0.623317 -1.461193 
3 1.233421 -1.540319 1.107052 
+1

我得到「AttributeError:'DataFrame'對象沒有屬性'size'」,Pandas v0.15.0和Numpy v1.9.1?@Jeff – mgilbert