Tengo un marco de datos con nombres de columna, y quiero encontrar el que contiene una cadena determinada, pero que no coincide exactamente. Estoy buscando 'spike'en los nombres de columna como 'spike-2', 'hey spike', 'spiked-in'(la 'spike'parte es siempre continua).
Quiero que el nombre de la columna se devuelva como una cadena o una variable, por lo que accedo a la columna más tarde con df['name']o df[name]como normal. He intentado encontrar formas de hacer esto, sin éxito. ¿Algun consejo?

DataFrame.filterhace FYI (y puede proporcionar una expresión regular si lo desea)df[df.columns.drop(spike_cols)], ya que obtendrá unDataFramesin las columnas en la listaspike_colsque puede obtener utilizando su expresión regular no deseada.df[[col for col in df.columns if "spike" in col]]Esta respuesta utiliza el método DataFrame.filter para hacer esto sin la comprensión de la lista:
Producirá solo 'spike-2'. También puede usar expresiones regulares, como algunas personas sugirieron en los comentarios anteriores:
Producirá ambas columnas: ['spike-2', 'hey spke']
fuente
También puedes usar
df.columns[df.columns.str.contains(pat = 'spike')]Esto generará los nombres de columna:
'spike-2', 'spiked-in'Más sobre pandas.Series.str.contains .
fuente
También puede seleccionar por nombre, expresión regular. Consulte: pandas.DataFrame.filter
fuente
fuente
También puedes usar este código:
fuente
Obtener nombre y subconjunto en función de Inicio, Contiene y Finaliza:
fuente