¿Cómo puedo eliminar el espacio en blanco de los encabezados de Pandas DataFrame?

Estoy analizando datos de un archivo de Excel que tiene espacio en blanco adicional en algunos de los encabezados de columna.

Cuando reviso las columnas del dataframe resultante, así:

df.columns

El resultado se ve así:

Index(['Year', 'Month ', 'Value'])

En consecuencia, no puedo correr

df["Month"]

Porque me dirá que no se encuentra la columna, ya que pedí “Mes”, no “Mes”.

Mi pregunta, entonces, es ¿cómo puedo eliminar el espacio en blanco no deseado de los encabezados de las columnas?

Puedes darle funciones al método de rename . El método str.strip() debe hacer lo que quieras.

 In [5]: df Out[5]: Year Month Value 0 1 2 3 [1 rows x 3 columns] In [6]: df.rename(columns=lambda x: x.strip()) Out[6]: Year Month Value 0 1 2 3 [1 rows x 3 columns] 

Ahora puede simplemente llamar a .str.strip en las columnas si está usando una versión reciente:

 In [5]: df = pd.DataFrame(columns=['Year', 'Month ', 'Value']) print(df.columns.tolist()) df.columns = df.columns.str.strip() df.columns.tolist() ['Year', 'Month ', 'Value'] Out[5]: ['Year', 'Month', 'Value'] 

Tiempos

 In[26]: df = pd.DataFrame(columns=[' year', ' month ', ' day', ' asdas ', ' asdas', 'as ', ' sa', ' asdas ']) df Out[26]: Empty DataFrame Columns: [ year, month , day, asdas , asdas, as , sa, asdas ] %timeit df.rename(columns=lambda x: x.strip()) %timeit df.columns.str.strip() 1000 loops, best of 3: 293 µs per loop 10000 loops, best of 3: 143 µs per loop 

Así que str.strip es ~ 2X más rápido, espero que esto se str.strip mejor para dfs más grandes