Ich kann pandas
dropna()
Funktionen verwenden, um Zeilen mit einigen oder allen Spalten zu entfernen, die als NA
's festgelegt sind. Gibt es eine äquivalente Funktion zum Löschen von Zeilen mit allen Spalten mit dem Wert 0?
P kt b tt mky depth
1 0 0 0 0 0
2 0 0 0 0 0
3 0 0 0 0 0
4 0 0 0 0 0
5 1.1 3 4.5 2.3 9.0
In diesem Beispiel möchten wir die ersten 4 Zeilen aus dem Datenrahmen löschen.
Vielen Dank!
Antworten:
Es stellt sich heraus, dass dies auf vektorisierte Weise gut ausgedrückt werden kann:
quelle
df = df[(df.T != 0).any()]
rows with all columns having value 0
, aber man kann auf dieall
Methode schließen .Einzeiler. Keine Transponierung erforderlich:
Und für diejenigen, die Symmetrie mögen, funktioniert dies auch ...
quelle
df.loc[(df != 0).any(1)]
. Zusammenarbeit!axis=1
weil es explizit ist; mehr pythonisch meiner Meinung nachdf
df = df.loc[(df!=0).all(axis=1)]
unddf = df.loc[(df!=0).any(axis=1)]
Zeilen mit beliebigen Nullen gelöscht werden müssen, wie es das tatsächliche Äquivalent zu dropna () wäre.Ich schaue diese Frage ungefähr einmal im Monat nach und muss immer die beste Antwort aus den Kommentaren herausfinden:
Vielen Dank, Dan Allan!
quelle
Ersetzen Sie die Nullen durch
nan
und löschen Sie die Zeilen mit allen Einträgen alsnan
. Danach durchnan
Nullen ersetzen .quelle
Ich denke, diese Lösung ist die kürzeste:
quelle
Einige Lösungen, die ich beim Nachschlagen als hilfreich empfunden habe, insbesondere bei größeren Datenmengen:
Fahren Sie mit dem Beispiel von @ U2EF1 fort:
Auf einem größeren Datensatz:
quelle
df[~(df.values.prod(axis=1) == 0) | ~(df.values.sum(axis=1)==0)]
bdf[np.square(bdf.values).sum(axis=1) != 0]
Ergebnis:
quelle
ValueError: labels [True ... ] not contained in matrix
df = df.drop(temp)
benutzendf = df.drop(df[temp].index)
Mit einer Schnellfunktion
lambda
können Sie überprüfen, ob alle Werte in einer bestimmten Zeile vorhanden sind0
. Dann können Sie das Ergebnis dieser Anwendung verwenden,lambda
um nur die Zeilen auszuwählen, die dieser Bedingung entsprechen oder nicht entsprechen:Ausbeuten:
quelle
Eine andere Alternative:
quelle
Für mich hat dieser Code:
df.loc[(df!=0).any(axis=0)]
nicht funktioniert. Es wurde der genaue Datensatz zurückgegeben.Stattdessen habe ich
df.loc[:, (df!=0).any(axis=0)]
alle Spalten mit 0-Werten im Datensatz verwendet und gelöschtDie Funktion
.all()
hat alle Spalten gelöscht, in denen sich in meinem Datensatz Nullwerte befinden.quelle
Versuchen Sie diesen Befehl, es funktioniert perfekt.
quelle
So löschen Sie alle Spalten mit den Werten 0 in einer beliebigen Zeile:
quelle