2016-07-19 4 views
1

pandas.DataFrame 개체 주위에 래퍼 클래스를 만들려고합니다. 이 클래스에 대한 고유 한 메서드를 작성한 후 팬더의 메서드를 사용할 수도 있지만 팬더에서 온 것으로 명시 적으로 알려줍니다. 이런 식으로 작동합니다.데이터 프레임을 반환하는 메서드가있는 pandas.DataFrame 래퍼 만들기

df = pd.DataFrame(np.random.randn(5,2)) 
md = myData(df) 

a = md.df # returns the original pandas.DataFrame "df" to a (equivalent of a=df 
print(md) # prints as myData class 
print(md.df) # prints just as print(df) would. Equiv to print(df) 

md.mean() # mean as defined in myData class. Returns myData object 
md.df.mean() # mean as defined in pandas. Returns dataframe object 

md.std() # myData std 
md.df.std() # pandas std 

지금까지 내가 할 수 있었던 것은 실패한 시도였습니다. 내가 정말로해야한다고 생각하는 한가지는

import pandas as _pd 
class myData(_pd.DataFrame): 
    """ 
    Attempt to create a myData object 
    """ 
    def __init__(self, df, dic): 
     df = df.copy() 
     print(type(df)) 
     self.df = df 
     self = df 

RuntimeError: maximum recursion depth exceeded while calling a Python object으로 끝납니다.

EDIT

다음 코드 같은 에러로 끝난다.

import pandas as _pd 
class myData(_pd.DataFrame): 
    """ 
    Attempt to create a myData object 
    """ 
    def __init__(self, df, dic): 
     df = df.copy() 
     self.dic = dic 
     super(myData, self).__init__(df) 
     self.df = df 

그러나 나는 그런

def __init__(self, df, dic): 
     df = df.copy() 
     super(myData, self).__init__(df) 

를하려고하면, 그것은 작동하지만, 모든 방법은 DataFrames의 이미이기 때문에 결과는 정말 DataFrame 인 MYDATA 개체입니다.

코드에 무엇이 잘못되었거나 더 나은 방법이 있는지 알고 싶습니다. 당신은 부모로 DataFrame을 사용할 수 없습니다

+0

당신은 부모 클래스 '를 액세스 할 수있는 속성과'슈퍼를 사용하는 방법()'[이 질문] (HTTP에서 논의 : //stackoverflow.com/q/576169/3991125). – albert

+0

팁에 대한 @albert 감사. 내 편집을 보아라. – TomCho

답변

0

:

class myData(object): 
    """ 
    Attempt to create a myData object 
    """ 
    def __init__(self, df): 
     self.df = df.copy() 

df = pd.DataFrame(np.random.randn(100, 5), columns=list('ABCDE')) 
mdf = myData(df) 
mdf.df.describe() 

enter image description here

관련 문제