Python 如何在HDF5中存储类实例
TL;博士:问题在标题中。请参阅代码片段 我需要将pandas.DataFrame对象存储在类似字典的数据结构中,并将它们保存到磁盘。在我当前的实现中,我使用非嵌套的PythonPython 如何在HDF5中存储类实例,python,pandas,data-structures,io,hdf5,Python,Pandas,Data Structures,Io,Hdf5,TL;博士:问题在标题中。请参阅代码片段 我需要将pandas.DataFrame对象存储在类似字典的数据结构中,并将它们保存到磁盘。在我当前的实现中,我使用非嵌套的Pythondict,格式为dict[str,pandas.DataFrame],我每分钟将所有pandas.DataFrame作为csv文件保存到磁盘。然而,这两个职责(内存中的数据存储和磁盘存储)可以使用HDF5等数据结构进行优雅的统一 一个重要的限制是,我无法更改pandas.DataFrame中存储的对象类型,而且显然不是所
dict
,格式为dict[str,pandas.DataFrame]
,我每分钟将所有pandas.DataFrame
作为csv文件保存到磁盘。然而,这两个职责(内存中的数据存储和磁盘存储)可以使用HDF5等数据结构进行优雅的统一
一个重要的限制是,我无法更改pandas.DataFrame中存储的对象类型,而且显然不是所有对象类型都可以存储在HDF5中。原因是我正在使用预定义的数据类型实现一个第三方接口,这些数据类型需要以其本机形式进行处理。将实例映射到不同的对象(例如实例到dict
)将需要编写额外的逻辑层来来回映射不同类型的对象(dict
到实例),这是不好的
类似的问题和答案。但是,我不一定对以后查询存储的实例感兴趣。此外,理想情况下,我会将序列化实例所需的额外逻辑量保持在最低限度(如果需要的话)。数据压缩也不是问题。或者,一个可能的答案也可以指向一个完善的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.