Mam ramkę danych pandy z następującymi nazwami kolumn:
Wynik1, Test1, Wynik2, Test2, Wynik3, Test3, itd ...
Chcę usunąć wszystkie kolumny, których nazwa zawiera słowo „Test”. Numery takich kolumn nie są statyczne, ale zależą od poprzedniej funkcji.
Jak mogę to zrobić?
Oto jeden sposób, aby to zrobić:
źródło
df.drop(list(df.filter(regex = 'Test')), axis = 1, inplace = True)
list(df.filter(regex='Test'))
aby lepiej pokazać, co robi linia. Wybrałbym równieżdf.filter(regex='Test').columns
konwersję ponad listyregex
słowa kluczowego, gdylike
wydaje się, że jest bardziej adekwatne.filter
polega na tym, że zwraca kopię WSZYSTKICH danych jako kolumny , które chcesz usunąć. Jest to marnotrawstwo, jeśli przekazujesz ten wynik tylko dodrop
(co ponownie zwraca kopię) ... lepszym rozwiązaniem byłobystr.startswith
(dodałem tutaj odpowiedź z tym).Tańsze, szybsze i idiomatyczne:
str.contains
W najnowszych wersjach pand możesz używać metod ciągów w indeksie i kolumnach. Tutaj,
str.startswith
wydaje się że dobrze pasuje.Aby usunąć wszystkie kolumny zaczynające się od danego podciągu:
Aby dopasować bez rozróżniania wielkości liter, możesz użyć dopasowania opartego na wyrażeniach regularnych z
str.contains
z kotwicą SOL:jeśli typy mieszane są możliwe, określ
na=False
również.źródło
Możesz odfiltrować wybrane kolumny za pomocą „filtru”
Teraz filtruj
Dostać..
źródło
not like='result'
Można to zrobić zgrabnie w jednej linii za pomocą:
źródło
df.drop(df.filter(regex='Test').columns, axis=1, inplace=True)
Użyj
DataFrame.select
metody:źródło
FutureWarning: 'select' is deprecated and will be removed in a future release. You can use .loc[labels.map(crit)] as a replacement
import re
wcześniej.Ta metoda robi wszystko na swoim miejscu. Wiele innych odpowiedzi tworzy kopie i nie jest tak wydajnych:
df.drop(df.columns[df.columns.str.contains('Test')], axis=1, inplace=True)
źródło
Nie upuszczaj. Złap przeciwieństwo tego, czego chcesz.
źródło
najkrótsza droga to:
źródło
Rozwiązanie w przypadku usuwania listy nazw kolumn zawierających wyrażenie regularne. Wolę to podejście, ponieważ często edytuję listę rozwijaną. Używa negatywnego wyrażenia regularnego filtru dla listy rozwijanej.
źródło