Löschen Sie mehrere Spalten in Pandas

72

Ich versuche, mehrere Spalten (Spalte 2 und 70 in meinem Datensatz, indiziert als 1 bzw. 69) nach Indexnummer in einem Pandas-Datenrahmen mit dem folgenden Code zu löschen:

df.drop([df.columns[[1, 69]]], axis=1, inplace=True)

Ich erhalte folgende Fehlermeldung:

TypeError: unhashable type: 'Index'

Und in meinem Code wird [1, 69] hervorgehoben und sagt:

Expected type 'Integral', got 'list[int]' instead

Der folgende Code macht das, was ich möchte, erfolgreich, aber in zwei Zeilen sich wiederholenden Codes (zuerst das Löschen des Spaltenindex 69, dann 1 und die Reihenfolge sind wichtig, da das Löschen früherer Spalten den Index späterer Spalten ändert). Ich dachte, ich könnte mehr als einen Spaltenindex einfach als Liste angeben, aber vielleicht habe ich oben etwas falsch gemacht?

df.drop([df.columns[69]], axis=1, inplace=True)
df.drop([df.columns[1]], axis=1, inplace=True)

Gibt es eine Möglichkeit, dies in einer Zeile zu tun, ähnlich wie beim ersten Codefragment oben?

lauwitmer
quelle

Antworten:

104

Sie müssen es nicht in eine Liste mit einschließen, sondern [..]nur die Unterauswahl des Spaltenindex angeben:

df.drop(df.columns[[1, 69]], axis=1, inplace=True)

da das Indexobjekt bereits als listenartig angesehen wird.

Joris
quelle
1
Das funktioniert, danke! In PyCharm wird immer noch die [1, 69] hervorgehoben und sagt: Erwarteter Typ 'Integral', stattdessen 'Liste [int]' - Na ja. PyCharm muss das beheben, aber zumindest ist der Code solide.
Lukewitmer
1
Ah, du meinst, dass es einen solchen Fehler in der statischen Analyse gibt? (nicht, wenn Sie den Code ausführen) In der Tat ist das ein Fehler in dem Linter, der in PyCharm für die statische Analyse verwendet wird
joris
19
Hinweis df.columns [1:69] kann für die Spalten 2-70 verwendet werden.
Lothilius
17

Versuche dies

df.drop(df.iloc[:, 1:69], inplace=True, axis=1)

Das funktioniert bei mir

Okroshiashvili
quelle
3
Für neuere Benutzer empfehle ich diese Antwort, da Sie dadurch gezwungen werden, mit der Positionsindizierung zu arbeiten, df.ilocdie in vielen anderen Fragen angezeigt wird, die eine Spalte oder Zeile an einer bestimmten Position (erste, letzte, n-te, dazwischen) ausführen sollen i-te und j-te usw.).
blue_chip