【问题标题】:Serialize a dictionary containing pandas data-frames (Python)序列化包含熊猫数据框的字典(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}}

【问题讨论】:

    标签: python serialization dictionary pandas dataframe


    【解决方案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

      但您使用的tablesversion 似乎很挑剔。在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 是一场噩梦。
      猜你喜欢
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 2015-06-02
      相关资源
      最近更新 更多