Tengo un marco de datos de pandas con los siguientes nombres de columna:
Resultado1, Prueba1, Resultado2, Prueba2, Resultado3, Prueba3, etc ...
Quiero eliminar todas las columnas cuyo nombre contenga la palabra "Prueba". El número de tales columnas no es estático sino que depende de una función previa.
¿Cómo puedo hacer eso?
Esta es una buena forma de hacerlo:
fuente
df.drop(list(df.filter(regex = 'Test')), axis = 1, inplace = True)
list(df.filter(regex='Test'))
para mostrar mejor lo que está haciendo la línea. También optaría por ladf.filter(regex='Test').columns
conversión por encima de la listaregex
palabra clave cuando lalike
palabra clave parece ser más adecuada.filter
es que devuelve una copia de TODOS los datos como columnas que desea eliminar. Es un desperdicio si solo está pasando este resultado adrop
(que nuevamente devuelve una copia) ... una mejor solución seríastr.startswith
(agregué una respuesta con eso aquí).Más barato, más rápido e idiomático:
str.contains
En versiones recientes de pandas, puede usar métodos de cadena en el índice y las columnas. Aquí,
str.startswith
parece una buena opción.Para eliminar todas las columnas que comienzan con una subcadena determinada:
Para la coincidencia que no distingue entre mayúsculas y minúsculas, puede utilizar la coincidencia basada en expresiones regulares
str.contains
con un ancla SOL:si los tipos mixtos son una posibilidad, especifique
na=False
también.fuente
Puede filtrar las columnas que SÍ desea usando 'filtro'
Ahora filtrar
Obtener..
fuente
not like='result'
Esto se puede hacer perfectamente en una línea con:
fuente
df.drop(df.filter(regex='Test').columns, axis=1, inplace=True)
Usa el
DataFrame.select
método:fuente
FutureWarning: 'select' is deprecated and will be removed in a future release. You can use .loc[labels.map(crit)] as a replacement
import re
antemano.Este método hace todo en su lugar. Muchas de las otras respuestas crean copias y no son tan eficientes:
df.drop(df.columns[df.columns.str.contains('Test')], axis=1, inplace=True)
fuente
No dejes caer. Captura lo contrario de lo que quieres.
fuente
la forma más corta de hacerlo es:
fuente
Solución al eliminar una lista de nombres de columnas que contienen expresiones regulares. Prefiero este enfoque porque con frecuencia edito la lista desplegable. Utiliza una expresión regular de filtro negativa para la lista desplegable.
fuente