Wie um eine Unterklasse pandas DataFrame?

Unterklassen pandas Klassen scheint eine gemeinsame müssen, aber ich konnte nicht finden, Verweise auf das Thema. (Es scheint, dass pandas sind die Entwickler noch dran arbeiten: https://github.com/pydata/pandas/issues/60).

Gibt es SO einige threads zu dem Thema, aber ich hoffe, dass jemand hier kann einen mehr systematischen überblick über die derzeit der beste Weg, um eine Unterklasse pandas.DataFrame erfüllt, dass zwei, ich denke, Allgemeine Anforderungen:

import numpy as np
import pandas as pd

class MyDF(pd.DataFrame):
    # how to subclass pandas DataFrame?
    pass

mydf = MyDF(np.random.randn(3,4), columns=['A','B','C','D'])
print type(mydf)  # <class '__main__.MyDF'>

# Requirement 1: Instances of MyDF, when calling standard methods of DataFrame,
# should produce instances of MyDF.
mydf_sub = mydf[['A','C']]
print type(mydf_sub)  # <class 'pandas.core.frame.DataFrame'>

# Requirement 2: Attributes attached to instances of MyDF, when calling standard 
# methods of DataFrame, should still attach to the output.
mydf.myattr = 1
mydf_cp1 = MyDF(mydf)
mydf_cp2 = mydf.copy()
print hasattr(mydf_cp1, 'myattr')  # False
print hasattr(mydf_cp2, 'myattr')  # False

Ist und es keine nennenswerten Unterschiede für die Unterklassen pandas.Serie? Danke.

  • sehen Sie hier ein schönes Beispiel: github.com/kjordahl/geopandas; es ist zu beachten, dass im Allgemeinen IMHO Ihr nicht ein Grund, immer sub-Klasse, die Zusammensetzung funktioniert viel besser, ist flexibler und bietet mehr Vorteile.
  • Ich denke, es gibt Gründe zu wollen, um eine Unterklasse, atm, es funktioniert nicht, wie es in dem verlinkten Problem - es ist nie Priorität (auch wenn einige Arbeit getan wurde, auf Sie...)
  • Können Sie bitte empfehlen eine Weise zu verwenden, die Zusammensetzung auf pandas.DataFrame? Danke! (Siehe auch here.)
  • Siehe 0.16 docs hier
  • Vielen Dank für die nützlichen link! Jedoch, ich sehe nicht eine empfohlene Art der Zusammensetzung gibt. So wissen Sie, was schief geht in den Fehler den ich habe, den link gab ich in meinem letzten Kommentar? Danke!
  • Es scheint mir, dass die Vererbung ist ein wesentliches Merkmal der objektorientierten Programmierung, die unabhängig von jeder Aussicht über Komposition vs. Vererbung. Die Schwierigkeit der Unterklassen DataFrame macht mit dem Paket deutlich weniger attraktiv für mich und ich denke viele andere, ausgehend von den berichten auf den pandas-GitHub-Seite.
  • en.wikipedia.org/wiki/Composition_over_inheritance#Drawbacks kurz und bündig fasst das Problem. Ich möchte nur hinzufügen, eine kleine Methode, um DataFrame...
  • also patch in einer Methode; erstellen von Unterklassen ist fast immer eine schlechte Idee für eine reiche, komplexe Objekt
  • Ich habe auch eine nicht-triviale codebase. Ich bin nicht in einer position, um zu jagen, ob der patch hat sich fortgepflanzt durch alle import-Anweisungen in allen Modulen.

InformationsquelleAutor Lei | 2014-03-03
Schreibe einen Kommentar