Ich habe einen Pandas-Datenrahmen mit den folgenden Spaltennamen:
Ergebnis1, Test1, Ergebnis2, Test2, Ergebnis3, Test3 usw.
Ich möchte alle Spalten löschen, deren Name das Wort "Test" enthält. Die Anzahl solcher Spalten ist nicht statisch, sondern hängt von einer vorherigen Funktion ab.
Wie kann ich das machen?
Hier ist ein guter Weg dazu:
quelle
df.drop(list(df.filter(regex = 'Test')), axis = 1, inplace = True)
list(df.filter(regex='Test'))
um besser zu zeigen, was die Linie tut. Ich würde auch für sich entscheidendf.filter(regex='Test').columns
über Listenkonvertierungregex
Schlüsselwort, wenn daslike
Schlüsselwort angemessener zu sein scheint.filter
ist, dass eine Kopie ALLER Daten als Spalten zurückgegeben wird , die Sie löschen möchten. Es ist verschwenderisch, wenn Sie dieses Ergebnis nur an übergebendrop
(was wiederum eine Kopie zurückgibt) ... eine bessere Lösung wärestr.startswith
(ich habe hier eine Antwort hinzugefügt ).Billiger, schneller und idiomatischer:
str.contains
In neueren Versionen von Pandas können Sie Zeichenfolgenmethoden für den Index und die Spalten verwenden. Hier
str.startswith
scheint eine gute Passform.So entfernen Sie alle Spalten, die mit einem bestimmten Teilstring beginnen:
Für die Übereinstimmung ohne Berücksichtigung der Groß- und Kleinschreibung können Sie die Regex-basierte Übereinstimmung
str.contains
mit einem SOL-Anker verwenden:Wenn gemischte Typen möglich sind, geben Sie dies
na=False
ebenfalls an.quelle
Sie können die gewünschten Spalten mit 'filter' herausfiltern.
Jetzt filtern
Bekommen..
quelle
not like='result'
Dies kann ordentlich in einer Zeile erfolgen mit:
quelle
df.drop(df.filter(regex='Test').columns, axis=1, inplace=True)
Verwenden Sie die
DataFrame.select
Methode:quelle
FutureWarning: 'select' is deprecated and will be removed in a future release. You can use .loc[labels.map(crit)] as a replacement
import re
vorher.Diese Methode erledigt alles an Ort und Stelle. Viele der anderen Antworten erstellen Kopien und sind nicht so effizient:
df.drop(df.columns[df.columns.str.contains('Test')], axis=1, inplace=True)
quelle
Lass dich nicht fallen. Fangen Sie das Gegenteil von dem, was Sie wollen.
quelle
Der kürzeste Weg ist:
quelle
Lösung beim Löschen einer Liste von Spaltennamen, die Regex enthalten. Ich bevorzuge diesen Ansatz, weil ich die Dropdown-Liste häufig bearbeite. Verwendet einen negativen Filter-Regex für die Drop-Liste.
quelle