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

时间:2013-07-28 10:51:00

标签: python serialization dictionary pandas dataframe

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

  

{'method1':

     
    

{'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,
    
  

'method2':

  
    

{'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}}
    
  

2 个答案:

答案 0 :(得分:3)

使用pickle.dump(s) and pickle.load(s)。它确实有效。 Pandas DataFrames也有自己的方法df.save(“filename”),可用于序列化单个DataFrame ......

答案 1 :(得分:0)

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

在正确加载了all_df = pickle.load(open("all_df.p","rb"))

之后

重新启动木星环境时,我会得到UnpicklingError: invalid load key, '\xef'.

here中描述的一种方法指出,我们可以使用HDF5 (pytables)来完成这项工作。从他们的文档中:

HDFStore是一个类似dict的对象,可以读写熊猫

但是您使用的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]