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.filter
hace FYI (y puede proporcionar una expresión regular si lo desea)df[df.columns.drop(spike_cols)]
, ya que obtendrá unDataFrame
sin las columnas en la listaspike_cols
que 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