具有实例变量的Pandas自定义访问器

时间:2019-12-18 23:44:47

标签: python pandas

我正在尝试extend pd.DataFrame并提供一些额外的功能。我的方法工作正常,但是我想将一些其他数据存储为实例变量,但遇到了意外的麻烦。

到目前为止,我有:

@pd.api.extensions.register_dataframe_accessor('foo')
class Foo:

    def __init__(self, df):
        self._df = df

    @staticmethod
    def load_data(arg):
        data = doStuff(arg)
        obj = pd.DataFrame(data)
        # Remember how this object was made
        obj.__dict__['arg'] = arg
        return obj        

(对obj.__dict__的笨拙分配,而不是仅仅说obj.arg = arg,阻止了Pandas将其视为试图创建列的尝试。当我将DataFrame子类化时,我学会了这样做。头疼。)

然后我这样做:

obj = Foo.load_data('stuff')
obj.arg
obj.foo.arg
obj.foo._df.arg

最后3行中的每行都导致一个AttributeError。我知道我分配了财产...去哪儿了?

1 个答案:

答案 0 :(得分:0)

我通过以下方法使它起作用:

obj.foo.__dict__['arg'] = arg

然后:

obj.foo.arg