我想通過下面的代碼方法鏈派生數據框類
class CustomFrame(DataFrame):
def __init__(self):
DataFrame.__init__(self,{"a":[1,2,3,4],"b":[5,6,7,8]})
def get(self):
return self.loc[1]
def foo(self):
return 2*self
現在我想以擴展大熊貓數據框鏈的方法調用,如:
>>> c=CustomFrame()
>>> c.get().foo()
'Series' object has no attribute 'foo'
明顯.loc
返回一系列哪些不知道有關自定義foo
方法的任何信息。有什麼辦法可以做到這一點?
編輯:
理想我想這樣做
c.method_from_data_frame().method_from_custom_frame().another_method_from_data_frame()
繼我已經覆蓋的DataFrame
構造HYRY的意見,但是我需要設置初始化一些屬性CustomFrame
class CustomFrame(DataFrame):
def __init__(self, *args, **kw):
super(CustomFrame, self).__init__(*args, **kw)
self.c = kw.get('c',False)
@property
def _constructor(self):
return CustomFrame
>>> c=CustomFrame(c=5)
>>> print c.c
5
>>> print c.get().c
False
我試過用functools
partial
@property
def _constructor(self):
return partial(CustomFrame,c=5)
但我得到一個pandas.core.common.PandasError: DataFrame constructor not properly called!
錯誤。另一種方法是改變get
到
def get(self):
ret = self.loc[[1]] # CustomFrame with default .c
ret.c = self.c
return ret
這似乎不是很優雅
要麼重寫'loc'返回一個'CustomFrame',或'轉換它的返回值GET'。 – jonrsharpe 2014-11-01 13:45:46
@jonrsharpe mmmh覆蓋'DataFrame.loc'意味着覆蓋每個我可能想要鏈接的返回值的方法。 – greole 2014-11-01 16:08:37
呃...是的,否則你不會得到一個'CustomFrame'。我想你可以用'__getattribute__'做些事情。 – jonrsharpe 2014-11-01 16:09:54