Ich versuche, eine Klasse zu erstellen, die ein Wrapper um pandas.DataFrame
Objekte ist. Nachdem ich meine eigenen Methoden für diese Klasse geschrieben habe, möchte ich, dass die Methoden der Pandas auch verfügbar sind, aber auf eine Weise, die mir/dem Benutzer ausdrücklich sagt, dass sie Pandas sind. Es wäreErstellen eines Pandas.DataFrame-Wrappers mit einer Methode zum Zurückgeben eines Datenrahmens
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
wie diese Arbeit bisher alles, was ich konnte erfolglose Versuche machen würden. Eine Sache, die ich wirklich dachte, es sollte aber nicht heißt
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
Es mit RuntimeError: maximum recursion depth exceeded while calling a Python object
austritt.
EDIT
Der folgende Code endet mit dem gleichen Fehler.
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
Wenn ich jedoch
def __init__(self, df, dic):
df = df.copy()
super(myData, self).__init__(df)
versuchen Dann funktioniert es, aber das Ergebnis ist ein myData Objekt, das wirklich ein Datenrahmen ist, da jede Methode ist bereits, dass der Datenrahmen.
Irgendeine Idee, was mit dem Code falsch sein könnte oder ob es eine Möglichkeit gibt, das besser zu machen?
Sie können die übergeordneten Klasse zugreifen Attribute und Methoden mit 'super()' wie in [diese Frage] (http diskutiert: //stackoverflow.com/q/576169/3991125). – albert
@albert danke für deinen Tipp. Bitte sehen Sie meine Bearbeitung – TomCho