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').columnsconversión por encima de la listaregexpalabra clave cuando lalikepalabra clave parece ser más adecuada.filteres 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.containsEn versiones recientes de pandas, puede usar métodos de cadena en el índice y las columnas. Aquí,
str.startswithparece 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.containscon un ancla SOL:si los tipos mixtos son una posibilidad, especifique
na=Falsetambié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.selectmétodo:fuente
FutureWarning: 'select' is deprecated and will be removed in a future release. You can use .loc[labels.map(crit)] as a replacementimport reantemano.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