pandas dataframe entfernen Konstante Spalte
Ich habe einen dataframe, die möglicherweise oder möglicherweise nicht haben Spalten, die den gleichen Wert. Zum Beispiel
row A B
1 9 0
2 7 0
3 5 0
4 2 0
Ich würde gerne zurück nur
row A
1 9
2 7
3 5
4 2
Gibt es eine einfache Möglichkeit zu bestimmen, ob eine Spalte vorhanden ist und dann diese entfernen?
InformationsquelleAutor user1802143 | 2013-11-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Glaube ich, ist diese option schneller als die anderen Antworten hier, wie es wird, Durchlaufen die Daten-Frames nur einmal für den Vergleich und Kurzschluss wenn Sie einen nicht eindeutigen Wert gefunden wird.
In meinen tests, meine Lösung ist immer schneller als das zählen der einzigartige Elemente, obwohl der Faktor variiert von 0,1 für eine 10×10 DataFrame bei etwa 0,5 für 10000×10. Ich denke, dass der Speicher, den Sie speichern, indem nicht die Berechnung der vollen Gleichstellung array trades Sie sich gegen die extra-Zeit beteiligt zählen alle eindeutigen Werte (und Erhaltung einer Tabelle von Werten schon gesehen und so weiter).
Guter Punkt, nehmen Sie wieder die effizienter! Frage mich immer noch, wenn der Weg zu einem Kurzschluss der != nach der erste Unterschied, der es sieht.
Beachten Sie, dass eine Spalte mit NaN wird nicht als konstant. Dies ist technisch korrekt (weil NaN ≠ Nan), aber das ist wohl nicht das, was wir wollen (da es praktisch keine Differenz zwischen den einzelnen NaN).
Ich habe eine Spalte, die einen Zeitstempel und ich bekomme
TypeError: int() argument must be a string, a bytes-like object or a number, not 'Timestamp'
verstehe nicht, warum.InformationsquelleAutor chthonicdaemon
Ignorieren
NaN
s, wie üblich, eine Spalte ist konstant, wennnunique() == 1
. Also:df.apply(pd.Series.nunique)
ist mehr einfachdf.nunique()
im Pandas-0.20.3 zumindest.Und wenn wir wollen, dass NaN als ein eindeutiger Wert, der
df.nunique(dropna=False)
gut funktioniert (es behandelt die Tatsache, dass NaN ≠ NaN, wie wir erwarten, zählen alle NaN-Werte als den gleichen Wert, obwohl Sie nicht gleich sind).InformationsquelleAutor DSM
Unter der Annahme, dass der DataFrame ist vollständig der Typ numeric:
können Sie versuchen:
die entfernt die Konstante(d.h. Varianz = 0) - Spalten.
Wenn das DataFrame ist der Typ sowohl numerische und Objekt, dann sollten Sie versuchen:
die drop-Konstante Spalten, die einen numerischen Typ nur.
Wenn Sie wollen auch zu ignorieren/löschen, Konstante enum-Spalten, die Sie versuchen sollten:
df = df.loc[:, ~df.var() == 0.0]
andernfalls wählen Sie die 0-Spalten. Es ist vermutlich auch für Sie lohntnp.isclose(0, df.var())
für möglich, floating-point-FehlerInformationsquelleAutor Hng
Ich im Vergleich der verschiedenen Methoden auf Daten-frame der Größe 120*10000. Und fand die effizient ist
Die anderen Anwärter sind
InformationsquelleAutor Yantraguru
Hier ist meine Lösung, denn ich brauchte beides, Objekt und numerischen Spalten. Nicht fordern, seine super-effizient oder nichts, aber es bekommt den job getan.
Zusätzliche Einschränkung, es funktioniert nicht auf Spalten von Listen oder arrays, da Sie nicht hashable.
InformationsquelleAutor dreyco676