2016-10-01 74 views
3

我有一个熊猫数据帧具有以下结构,其中包含数字和固定形状的numpy的数组:贮藏数据帧与数组项

import pandas as pd 
import numpy as np 

df = pd.DataFrame({"num":(23, 42), "list":(np.arange(3), np.arange(1,4)) 

假设我有大(超过1 GB)的量在这个数据的我想快速存储和检索,我应该如何进行存储?如果我使用HDF5,Numpy数组会被腌制,这会影响快速检索数据的能力。有什么方法可以告诉HDF5如何存储Numpy数组?或者,我应该不使用HDF5吗?

以下GitHub的线程似乎表明以下几点:

  1. 创建一个函数,得到所需的numpy的阵列,存储在其他格式[1]
  2. 创建一个类来通知HDF5 [2]

这两个解决方案似乎都很奇怪,我觉得这个问题有多普遍。有更多的一般方法吗?我只是使用错误的工具?

+0

都是阵列具有相同的形状? – HYRY

+0

是的。我会将这些信息添加到我的问题中。 – Seanny123

+0

然后您可以将数组转换为列。 – HYRY

回答

3

我的意思是这样的:

df_x = pd.concat([df.num, pd.DataFrame(np.vstack(df.list))], 
       keys=["key", "arr"], axis=1) 

数据框:

key arr  
    num 0 1 2 
0 23 0 1 2 
1 42 1 2 3 

转换回来:

pd.concat([df_x.key, pd.Series(tuple(df_x.arr.values), name='list')], axis=1) 

    num  list 
0 23 [0, 1, 2] 
1 42 [1, 2, 3] 
+0

希望你不介意我把你的帖子弄糟。 – piRSquared