我如何划分大熊猫数据帧?

时间:2014-06-27 23:00:15

标签: python numpy pandas fork

我有一个巨大的时间序列函数存储在HDF5商店的pandas数据框中,我想要绘制时间序列中每个函数的某个变换的图。由于绘图的数量如此之大,并且绘制它们需要很长时间,因此我使用fork()numpy.array_split()来打破索引并并行运行多个绘图。

这样做意味着每个进程都有一个整个时间序列的副本。由于限制了我可以运行的进程数量是我使用的内存总量,我希望能够让每个进程只存储它自己的数据帧块。

如何拆分pandas数据框?

1 个答案:

答案 0 :(得分: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