我正在尝试将属性添加到pandas.DataFrame的子类中,它们会在酸洗和去除后消失:
import cPickle
import pandas as pd
class MyClass(pd.DataFrame):
def __init__(self):
super(MyClass, self).__init__()
self.bar = 1
myc = MyClass()
with open('myc.pickle', 'wb')as myfile:
cPickle.dump(myc,myfile)
with open('myc.pickle', 'rb')as myfile:
b = cPickle.load(myfile)
print b.bar
输出:
Traceback (most recent call last):
File "test_df.py", line 14, in <module>
print b.bar
File "C:\Python27\lib\site-packages\pandas\core\frame.py", line 1771, in __getattr__
(type(self).__name__, name))
AttributeError: 'MyClass' object has no attribute 'bar'
知道如何安全地添加属性吗?
答案 0 :(得分:5)
这与子类化无关。 Pandas对象的属性不会序列化。
您可以阅读this thread进行讨论和解决方法。该主题再次在this other recent thread重新出现。
答案 1 :(得分:0)
你可以使用@property装饰器做类似的事情:
class MyClass(pd.DataFrame):
def __init__(self, *args, **kwargs):
super(MyClass, self).__init__(*args, **kwargs)
self.foo = 1
@property
def bar(self):
return 1
在酸洗后 MyClass.foo
将不可用,但MyClass.bar
将在那里(截至目前为止,只读)。