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.