序列化包含熊猫数据框的字典(Python)
Posted
技术标签:
【中文标题】序列化包含熊猫数据框的字典(Python)【英文标题】:Serialize a dictionary containing pandas data-frames (Python) 【发布时间】:2013-07-28 06:20:54 【问题描述】:我有一个包含几个 pandas Dataframe(由键标识)的 dict,任何有效序列化(并干净加载)它的建议。这是结构(pprint 显示输出)。每个 dict['method_x_']['meas_x_'] 都是一个熊猫数据框。目标是保存数据框以使用一些特定的绘图选项进行进一步绘图。
'方法1':
'meas1':
config1 config2 0 0.193647 0.204673 1 0.251833 0.284560 2 0.227573 0.220327,
'meas2':
config1 config2 0 0.172787 0.147287 1 0.061560 0.094000 2 0.045133 0.034760,
'方法2':
'meas1':
congif1 config2 0 0.193647 0.204673 1 0.251833 0.284560 2 0.227573 0.220327,
'meas2':
config1 config2 0 0.172787 0.147287 1 0.061560 0.094000 2 0.045133 0.034760
【问题讨论】:
【参考方案1】:使用pickle.dump(s) and pickle.load(s)。它确实有效。 Pandas DataFrames 也有自己的方法 df.save("filename") 可用于序列化单个 DataFrame...
【讨论】:
【参考方案2】:在我的特定用例中,我尝试做一个简单的pickle.dump(all_df, open("all_df.p","wb"))
当它正确加载时> all_df = pickle.load(open("all_df.p","rb"))
当我重新启动我的 Jupiter 环境时,我会得到一个 UnpicklingError: invalid load key, '\xef'.
here 描述的方法之一表明我们可以使用HDF5 (pytables) 来完成这项工作。从他们的文档中:
HDFStore 是一个类似dict的对象,可以读写pandas
但您使用的tables
version 似乎很挑剔。在pip install --upgrade tables
并重新启动运行时后,我让我的工作。
如果您需要关于如何使用它的总体思路:
#consider all_df as a list of dataframes
with pd.HDFStore('df_store.h5') as df_store:
for i in all_df.keys():
df_store[i] = all_df[i]
您应该有一个df_store.h5
文件,您可以使用相反的过程将其转换回来:
new_all_df = dict()
with pd.HDFStore('df_store.h5') as df_store:
for i in df_store.keys():
new_all_df[i] = df_store[i]
【讨论】:
谢谢。 h5py.org 文档是一场噩梦,但也许这仅仅是因为 hdf5 是一场噩梦。以上是关于序列化包含熊猫数据框的字典(Python)的主要内容,如果未能解决你的问题,请参考以下文章