我正在尝试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
。我知道我分配了财产...去哪儿了?
答案 0 :(得分:0)
我通过以下方法使它起作用:
obj.foo.__dict__['arg'] = arg
然后:
obj.foo.arg