使用pickle与从Pandas DataFram派生的类一起使用时对象属性丢失

2024-04-29 04:30:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试更新派生类的pickle行为,但无法在pickling中保存对象属性。在

import pandas as pd

class Fruit(pd.DataFrame): 
    def __init__(self):
        super(Fruit, self).__init__()
        self.codebook={3:4}

sdf = Fruit()

sdf.codebook ={1:2}

import pickle

with open('mypickle.pickle', 'wb') as f:
    pickle.dump(sdf, f)
with open('mypickle.pickle') as f:
    loaded_obj = pickle.load(f)        
assert  loaded_obj.__class__ == Fruit
assert loaded_obj.codebook

最终断言失败。AttributeError: 'Fruit' object has no attribute 'codebook'

如果我的类定义是class Fruit(): pass,那么它可以正常工作。在

如何pickle我的对象并包含新的“点”属性(.codebook)?在

(此问题与向Pandas DataFrame类添加测量数据码本信息和功能的开放项目有关:https://github.com/cpbl/surveypandas

更新:

我试过更换DataFrame.to_pickle数据帧用水果自己的,直接用泡菜。倾倒以同样的方式失败。(为什么?)在

这是一个不切实际的努力,它成功地记录了一切,但却导致了一些无法理解的东西熊猫。读琰泡菜(). 这似乎也不必要尴尬:

^{2}$

Tags: 对象importselfobjdataframe属性initas