5

我正在尝试将属性添加到 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'

知道如何安全地添加属性吗?

4

2 回答 2

5

这与子类化无关。Pandas 对象的属性不会序列化。

您可以阅读此主题以进行讨论和解决方法。这个话题在最近的另一个线程中再次出现。

于 2012-11-06T12:28:06.860 回答
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会在那里(截至目前,只读)。

于 2014-01-05T16:14:08.323 回答