【发布时间】:2019-07-28 03:14:37
【问题描述】:
我正在尝试腌制从 pandas.DataFrame 继承的对象。 我添加到数据框中的属性在酸洗/解酸过程中消失了。有一些明显的解决方法,但是......我做错了什么,还是这是一个错误?
import pandas as pd
import pickle
class Foo(pd.DataFrame):
def __init__(self,tag,df):
super().__init__(df)
self._tag = tag
foo = Foo('mytag', pd.DataFrame({'a':[1,2,3],'b':[4,5,6]}))
print(foo)
print(foo._tag)
print("-------------------------------------")
with open("foo.pkl", "wb") as pkl:
pickle.dump(foo, pkl)
with open("foo.pkl", "rb") as pkl:
foo1 = pickle.load(pkl)
print(type(foo1))
print(foo1)
print(foo1._tag)
这是我的输出:
a b
0 1 4
1 2 5
2 3 6
mytag
-------------------------------------
<class '__main__.Foo'>
a b
0 1 4
1 2 5
2 3 6
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-20-1e7e89e199c8> in <module>
21 print(type(foo1))
22 print(foo1)
---> 23 print(foo1._tag)
~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\generic.py in __getattr__(self, name)
5065 if self._info_axis._can_hold_identifiers_and_holds_name(name):
5066 return self[name]
-> 5067 return object.__getattribute__(self, name)
5068
5069 def __setattr__(self, name, value):
AttributeError: 'Foo' object no attribute '_tag'
(python 3.7,pandas 0.24.2,pickle.format_version 4.0)
【问题讨论】:
-
查看subclassing pandas data structures 上的文档,尤其是defining original properties 上的部分。