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