如何在HDF5中存储类实例

时间:2018-05-10 14:18:45

标签: python pandas data-structures io hdf5

TL; DR:问题在标题中。请参阅代码段。

我需要将pandas.DataFrame个对象存储在类似字典的数据结构中并将它们保存到磁盘。在我当前的实现中,我使用dict形式的非嵌套Python Dict[str, pandas.DataFrame],并且每分钟将所有pandas.DataFrame保存到磁盘作为csv文件。但是,使用HDF5等数据结构可以优雅地统一这两项职责(内存和磁盘中的数据存储)。

一个重要的限制是我无法更改pandas.DataFrame中存储的内容类型,显然并非所有对象类型都可以存储在HDF5中。原因是我实现了具有预定义数据类型的第三方接口,这些数据类型需要以其原生形式进行处理。将实例映射到不同的对象(例如实例到dict)将需要编写一个额外的逻辑层来来回映射不同类型的对象(dict到实例),这很糟糕。

回答here的类似问题。但是,我不一定对之后查询存储的实例感兴趣。另外,理想情况下,我会保留额外逻辑的数量,以便将实例序列化到最小(如果需要的话)。数据压缩也不是问题。或者,潜在的答案也可以指向一个成熟的python包,它已经封装了逻辑,以便在HDF5或类似的数据模型中存储类实例。

import pandas as pd


class C:
    def __init__(self, a=0):
        self.a = a

    def return_42(self):
        return self.a

df = pd.DataFrame([C()])
df.dtypes
#    0    object
#    dtype: object

store = pd.HDFStore('store1.hdf5')
store.append('c', pd.DataFrame([C()]))
#    TypeError: Cannot serialize the column [0] because 
#    its data contents are [mixed] object dtype.

0 个答案:

没有答案