Renombrar columnas en pandas

Tengo un DataFrame usando pandas y etiquetas de columna que necesito editar para reemplazar las etiquetas de columna originales.

Me gustaría cambiar los nombres de las columnas en un DataFrame A donde están los nombres de las columnas originales:

['$a', '$b', '$c', '$d', '$e'] 

a

['a', 'b', 'c', 'd', 'e'].

Tengo los nombres de las columnas editadas almacenados en una lista, pero no sé cómo reemplazar los nombres de las columnas.

RENOMBRAR COLUMNAS ESPECÍFICAS

Utilice la función [df.rename()][1] y refiera las columnas a renombrar. No es necesario renombrar todas las columnas:

df = df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'})
# Or rename the existing DataFrame (rather than creating a copy) 
df.rename(columns={'oldName1': 'newName1', 'oldName2': 'newName2'}, inplace=True)

Ejemplo de código mínimo

df = pd.DataFrame('x', index=range(3), columns=list('abcde'))
df

   a  b  c  d  e
0  x  x  x  x  x
1  x  x  x  x  x
2  x  x  x  x  x

Los siguientes métodos funcionan todos y producen la misma salida:

df2 = df.rename({'a': 'X', 'b': 'Y'}, axis=1)  # new method
df2 = df.rename({'a': 'X', 'b': 'Y'}, axis='columns')
df2 = df.rename(columns={'a': 'X', 'b': 'Y'})  # old method  

df2

   X  Y  c  d  e
0  x  x  x  x  x
1  x  x  x  x  x
2  x  x  x  x  x

Recuerde asignar el resultado de vuelta, ya que la modificación es no-inplace. Como alternativa, especifique inplace=True:

df.rename({'a': 'X', 'b': 'Y'}, axis=1, inplace=True)
df

   X  Y  c  d  e
0  x  x  x  x  x
1  x  x  x  x  x
2  x  x  x  x  x

A partir de la versión 0.25, también puede especificar errors='raise' para que se produzcan errores si se especifica una columna a renombrar no válida. Ver v0.25 rename() docs.


REASIGNAR LAS CABECERAS DE LAS COLUMNAS

Utilice df.set_axis() con axis=1 y inplace=False (para devolver una copia).

df2 = df.set_axis(['V', 'W', 'X', 'Y', 'Z'], axis=1, inplace=False)
df2

   V  W  X  Y  Z
0  x  x  x  x  x
1  x  x  x  x  x
2  x  x  x  x  x

Esto devuelve una copia, pero puedes modificar el DataFrame en su lugar estableciendo inplace=True (este es el comportamiento por defecto para las versiones

Comentarios (8)
Solución

Sólo hay que asignarlo al atributo .columns:

>>> df = pd.DataFrame({'$a':[1,2], '$b': [10,20]})
>>> df.columns = ['a', 'b']
>>> df
   a   b
0  1  10
1  2  20
Comentarios (13)

El método rename puede tomar una función, por ejemplo:

In [11]: df.columns
Out[11]: Index([u'$a', u'$b', u'$c', u'$d', u'$e'], dtype=object)

In [12]: df.rename(columns=lambda x: x[1:], inplace=True)

In [13]: df.columns
Out[13]: Index([u'a', u'b', u'c', u'd', u'e'], dtype=object)
Comentarios (3)