Eu tenho um dataframe do pandas com os seguintes nomes de coluna:
Resultado1, Teste1, Resultado2, Teste2, Resultado3, Teste3, etc ...
Desejo eliminar todas as colunas cujo nome contém a palavra "Teste". O número dessas colunas não é estático, mas depende de uma função anterior.
Como eu posso fazer isso?
Esta é uma boa maneira de fazer isso:
fonte
df.drop(list(df.filter(regex = 'Test')), axis = 1, inplace = True)
list(df.filter(regex='Test'))
para mostrar melhor o que a linha está fazendo. Eu também optaria peladf.filter(regex='Test').columns
conversão de listaregex
palavra - chave quando alike
palavra - chave parece ser mais adequada.filter
é que ele retorna uma cópia de TODOS os dados como colunas que você deseja eliminar. É um desperdício se você estiver apenas passando esse resultado paradrop
(que novamente retorna uma cópia) ... uma solução melhor seriastr.startswith
(adicionei uma resposta com isso aqui).Mais barato, mais rápido e idiomático:
str.contains
Em versões recentes do pandas, você pode usar métodos de string no índice e nas colunas. Aqui,
str.startswith
parece um bom ajuste.Para remover todas as colunas começando com uma determinada substring:
Para correspondência que não diferencia maiúsculas de minúsculas, você pode usar a correspondência baseada em regex
str.contains
com uma âncora SOL:se os tipos mistos forem uma possibilidade, especifique
na=False
também.fonte
Você pode filtrar as colunas que deseja usando 'filtro'
Agora filtrar
Obter..
fonte
not like='result'
Isso pode ser feito perfeitamente em uma linha com:
fonte
df.drop(df.filter(regex='Test').columns, axis=1, inplace=True)
Use o
DataFrame.select
método:fonte
FutureWarning: 'select' is deprecated and will be removed in a future release. You can use .loc[labels.map(crit)] as a replacement
import re
antes.Este método faz tudo no local. Muitas das outras respostas criam cópias e não são tão eficientes:
df.drop(df.columns[df.columns.str.contains('Test')], axis=1, inplace=True)
fonte
Não deixe cair. Pegue o oposto do que você deseja.
fonte
a maneira mais curta de fazer é:
fonte
Solução ao eliminar uma lista de nomes de colunas contendo regex. Prefiro essa abordagem porque frequentemente edito a lista suspensa. Usa um regex de filtro negativo para a lista suspensa.
fonte