Pandas DataFrame Object Vererbung oder Objektverwendung?

8

Ich baue eine Bibliothek für die Arbeit mit sehr spezifischen strukturierten Daten und baue meine Infrastruktur auf Pandas. Momentan schreibe ich eine Reihe von verschiedenen Datencontainern für verschiedene Anwendungsfälle, wie CTMatrix für Land x Zeitdaten usw., um Methoden zu integrieren, die für alle strukturierten Daten von CountryxTime geeignet sind.

Ich diskutiere derzeit zwischen

Option 1: Objektvererbung

%Vor%

oder Option 2: Objekt verwenden

%Vor%

Aus einer Software-Engineering-Perspektive gibt es hier eine offensichtliche Wahl?

Meine bisherigen Gedanken sind:

Option 1:

  1. Kann DataFrame-Methoden direkt in der CTMatrix-Klasse verwenden (wie CTmatrix.sort() ), ohne sie über Methoden auf dem verkapselten _data -Objekt in Option # 2
  2. zu unterstützen
  3. Updates und neue Methoden in Pandas werden vererbt, mit Ausnahme von Methoden, die mit lokalen Klassenmethoden überschrieben werden können

ABER

  1. Komplikationen mit einigen Methoden wie __init__() und die Attribute an die Oberklasse super(MyDF, self).__init__(*args, **kw)
  2. übergeben zu müssen

Option 2:

  1. Mehr Kontrolle über die Klasse und ihr Verhalten
  2. Vielleicht widerstandsfähiger gegen Updates in Pandas?

Aber

  1. Sie müssen ein getter () - oder nicht-verstecktes Attribut verwenden, um das Objekt wie einen Datenrahmen wie ( CTMatrix.data.sort() )
  2. zu verwenden

Gibt es zusätzliche Nachteile für den Ansatz in Option # 1?

    
sanguineturtle 01.07.2014, 07:31
quelle

2 Antworten

5

Ich würde die Unterklasse DataFrame vermeiden, weil viele der DataFrame -Methoden eine neue DataFrame und keine weitere Instanz Ihres CTMatrix -Objekts zurückgeben.

Es gibt ein paar offene Probleme auf GitHub, z. B .:

Allgemeiner ist dies eine Frage der Zusammensetzung gegen die Vererbung. Ich würde besonders auf Vorteil # 2 achten. Es mag jetzt großartig erscheinen, aber solange du nicht die Updates für Pandas im Auge behältst (und es ist ein sich schnell bewegendes Ziel), kannst du leicht mit unerwarteten Konsequenzen enden und dein Code wird schließlich mit Pandas verflochten.

    
Matti John 01.07.2014, 08:58
quelle
0

Wegen ähnlicher Probleme und Matti Johns Antwort schrieb ich eine _pandas_wrapper Klasse für ein Projekt von mir, weil ich auch von Pandas Dataframe erben wollte.

Ссылка

Der einzige Zweck dieser Klasse besteht darin, einem Pandas DataFrame ein Aussehen zu geben, das sicher erben kann.

Wenn Ihr Projekt LGPL lizensiert ist, können Sie es ohne Probleme wiederverwenden.

    
mcocdawc 19.09.2016 17:12
quelle

Tags und Links