繁体   English   中英

序列化包含熊猫数据帧的字典(Python)

[英]Serialize a dictionary containing pandas data-frames (Python)

我有一个包含几个 Pandas Dataframe(由键标识)的字典,任何有效序列化(并干净地加载)它的建议。 这是结构(一个 pprint 显示输出)。 每个 dict['method_x_']['meas_x_'] 都是一个熊猫数据框。 目标是保存数据框以使用一些特定的绘图选项进行进一步绘图。

{'方法1':

{'测量1':

 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':

{'测量1':

 congif1 config2 0 0.193647 0.204673 1 0.251833 0.284560 2 0.227573 0.220327,

'测量2':

 config1 config2 0 0.172787 0.147287 1 0.061560 0.094000 2 0.045133 0.034760}}

使用pickle.dump(s) 和 pickle.load(s) 它确实有效。 Pandas DataFrames 也有自己的方法 df.save("filename") ,您可以使用它来序列化单个 DataFrame ...

在我的特定用例中,我尝试做一个简单的pickle.dump(all_df, open("all_df.p","wb"))

虽然它正确加载 > all_df = pickle.load(open("all_df.p","rb"))

当我重新启动我的 Jupiter 环境时,我会收到一个UnpicklingError: invalid load key, '\\xef'.

这里描述的方法之一表明我们可以使用HDF5(pytables)来完成这项工作。 从他们的文档:

HDFStore 是一个类似 dict 的对象,可以读取和写入 Pandas

但是对于您使用的tables版本似乎很挑剔。 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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM