[英]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.