2016-07-25 13 views
1

Ich habe eine Klasse erstellt, um ein Dokument mit Pandas-Datenrahmen vorzuverarbeiten. Ich habe jedoch Probleme mit Filtern in meiner Klasse. Mein Code ist unten:Verwenden von Datenrahmen in einer Klasse zum Filtern von Ergebnissen

class Dataframe: 
    def __init__(self, my_dataframe): 
     self.my_dataframe = my_dataframe 
     self.my_dataframe = self.filter_priv() 

    def filter_priv(self): 
     df = self.my_dataframe.copy() 
     df = df[~(df.priv_id > -1) | ~(df.restriction_level > 0)] 

df1 = Dataframe(df) 

df 

Meine Ausgabe ist immer nicht gefilterte Ergebnisse. Meine Eingabedatei hat 262.000 Datensätze und mit dem Filter, wenn sie außerhalb meiner Klasse aufgerufen werden, filtert sie erfolgreich meine df auf 11.000 Datensätze. Irgendwelche Ideen, warum es in der Klasse nicht filtert?

+0

Sie geben nichts von 'filter_priv' zurück. Ist das deine Absicht? – SethMMorton

Antwort

0

Sie sind Problem könnte sein, dass Sie die Variable „df“ verwenden eine Dataframe Klasse zu initialisieren, aber die Variable df wurde noch nicht definiert ...

0

Sie machen diese Weg falsch. Sie werden von Datenrahmen abgeleitet, aber Sie speichern Ihre Daten dann in einer speziellen Datenrahmeneigenschaft. Kein bueno.

Sie sollten Unterklassen erstellen, wenn Sie eine Klasse haben möchten, die wie ein Datenframe quatscht, aber Sie möchten ein anderes Verhalten hinzufügen, das nicht verfügbar ist.

class Dataframe(DataFrame): 
    def __init__(self, *args, **kwargs): 
     super(Dataframe, self).__init__(*args, **kwargs) 

    def filter_priv(self): 
     return self[~(self.priv_id > -1) | ~(self.restriction_level > 0)] 

# Not sure if you can create a dataframe from another 
df1 = Dataframe(df) 

Aber das ist wirklich wahrscheinlich nicht einmal, was Sie wollen:

Wenn Sie zu Unterklasse wollen, sollten Sie es so tun. Es ist wahrscheinlich besser, nur zu haben:

def filter_priv(df): 
    return df[~(df.priv_id > -1) | ~(df.restriction_level > 0)] 

df1 = filter_priv(df) 
+0

Aber das OP untergliedert keinen DataFrame. Und in Ihrem Beispiel untergliedern Sie einen DataFrame nicht, also wird "Super" nicht so funktionieren, wie Sie es beschreiben. – SethMMorton

+0

Ah ... ich sehe das jetzt (was auch erklärt, warum ich keine Unterklasse erstellt habe, da ich einfach den Code kopiert/eingefügt habe). Anscheinend habe ich einfach * angenommen *, dass jeder, der eine Klasse mit dem Namen 'Dataframe' erstellt, dies tun würde, um die Pandas' DataFrame' zu ​​unterklassifizieren, denn warum sonst würden Sie eine Klasse erstellen und sie fast gleich benennen? –

Verwandte Themen