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 に答える