使用数组条目存储Dataframe

时间:2016-10-01 02:31:27

标签: python pandas numpy serialization

我有一个Pandas DataFrame,结构如下,包含数字和固定形状的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]
  3. 这两个解决方案似乎都很奇怪,因为我认为这个问题有多常见。有更一般的方法吗?我只是使用了错误的工具吗?

1 个答案:

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