Pandas: Renombrar columnas en Pandas

Publicado el 08 noviembre 2021 por Daniel Rodríguez @analyticslane

Los DataFrame de Pandas ofrecen la posibilidad de almacenar datos con indexación, tanto para filas como para columnas. Índices que puede ser necesario cambiar. Para ello se puede usar el método set_axis(), aunque puede ser poco productivo cuando solamente se quiere cambiar unos pocos índices. En estos caso se puede usar el método rename(). Veamos a continuación la forma de emplear este método para renombrar columnas en Pandas o también filas.

Cambiar el nombre de todas la columnas con set_axis()

El método set_axis() de los DataFrame de Pandas permite modificar el nombre de los índices tanto de las filas como las columnas. Así si tenemos el siguiente DataFrame

import pandas as pd

df = pd.DataFrame({'col 1': [1, 2, 3],
                   'col 2': [4, 5, 6],
                   'col 3': [7, 8, 9],
                   'Resume': [10, 11, 12]})

Es posible cambiar todos los nombres de las columnas mediante una línea como la siguiente.

df.set_axis(['X', 'Y', 'Z', 'Resume'], axis=1)
   X  Y  Z  Resume
0  1  4  7      10
1  2  5  8      11
2  3  6  9      12

El primer parámetro del método del método son los nombres y el segundo el eje sobre el que se aplica. Como es habitual el valor 0 indica las filas, valor por defecto, y 1 las columnas. Nótese además que el método, tal como se ha usado, devuelve un nuevo DataFrame con los nuevos ejes, no modifica el original. Para modificar el objeto original en lugar de crear uno nuevo es necesario asignar el valor verdadero al parámetro inplace.

Cambiar el nombre de algunas columnas con rename()

El método rename() es algo más flexible que el anterior, ya que permite cambiar el nombre de solo unas columnas. Para lo que como primer parámetro admite un diccionario donde la clave es el nombre antiguo y el valor es el nuevo. Por lo que para renombrar la primera columna solamente se debería escribir la siguiente línea de código.

df.rename({'col 1': 'X'}, axis=1)
   X  col 2  col 3  Resume
0  1      4      7      10
1  2      5      8      11
2  3      6      9      12

Al igual que set_axis() el método se aplica a las filas, por lo que para emplearlo en las columnas es necesario indicarlo mediante el parámetro axis. El diccionario puede tener tantos valores como sea necesario, pudiéndose modificar todos los valores.

df.rename({'col 1': 'X', 'col 2': 'Y', 'col 3': 'Z'}, axis=1)
   X  Y  Z  Resume
0  1  4  7      10
1  2  5  8      11
2  3  6  9      12

Cambiar el nombre de los índices en las filas

Aunque sea menos habitual también es posible cambiar el nombre de los indices. Usando el método de la misma forma que en el caso de las columnas, pero cambiando el valor del parámetro axis.

df.rename({1: 10})
    col 1  col 2  col 3  Resume
0       1      4      7      10
10      2      5      8      11
2       3      6      9      12

Aplicar los cambios en el propio DataFrame

Al igual que set_axis() el método crea un nuevo objeto con los cambios, algo que no es eficaz cuando se trabaja con objetos grandes ya que se crean varias copias de los objetos en memoria. En estos casos es posible hacer que el cambio se aplique al propio objeto mediante la propiedad inplace.

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

Conclusiones

En esta entrada se ha visto como el uso del método rename() facilita renombrar columnas en Pandas.