La respuesta actualmente seleccionada no menciona el rename_axis
método que se puede usar para cambiar el nombre del índice y los niveles de columna.
Pandas tiene algunas peculiaridades a la hora de cambiar el nombre de los niveles del índice. También hay un nuevo método DataFrame rename_axis
disponible para cambiar los nombres de nivel de índice.
Echemos un vistazo a un DataFrame
df = pd.DataFrame({'age':[30, 2, 12],
'color':['blue', 'green', 'red'],
'food':['Steak', 'Lamb', 'Mango'],
'height':[165, 70, 120],
'score':[4.6, 8.3, 9.0],
'state':['NY', 'TX', 'FL']},
index = ['Jane', 'Nick', 'Aaron'])
Este DataFrame tiene un nivel para cada uno de los índices de fila y columna. Tanto el índice de fila como el de columna no tienen nombre. Cambiemos el nombre del nivel de índice de la fila a 'nombres'.
df.rename_axis('names')
El rename_axis
método también tiene la capacidad de cambiar los nombres de nivel de columna cambiando el axis
parámetro:
df.rename_axis('names').rename_axis('attributes', axis='columns')
Si configura el índice con algunas de las columnas, el nombre de la columna se convertirá en el nuevo nombre del nivel de índice. Anexemos niveles de índice a nuestro DataFrame original:
df1 = df.set_index(['state', 'color'], append=True)
df1
Observe cómo el índice original no tiene nombre. Todavía podemos usar, rename_axis
pero necesitamos pasarle una lista de la misma longitud que el número de niveles de índice.
df1.rename_axis(['names', None, 'Colors'])
Puede usar None
para eliminar efectivamente los nombres de nivel de índice.
Las series funcionan de manera similar pero con algunas diferencias
Creemos una serie con tres niveles de índice
s = df.set_index(['state', 'color'], append=True)['food']
s
state color
Jane NY blue Steak
Nick TX green Lamb
Aaron FL red Mango
Name: food, dtype: object
Podemos usar de rename_axis
manera similar a como lo hicimos con DataFrames
s.rename_axis(['Names','States','Colors'])
Names States Colors
Jane NY blue Steak
Nick TX green Lamb
Aaron FL red Mango
Name: food, dtype: object
Observe que hay una pieza adicional de metadatos debajo de la serie llamada Name
. Al crear una serie a partir de un marco de datos, este atributo se establece en el nombre de la columna.
Podemos pasar un nombre de cadena al rename
método para cambiarlo
s.rename('FOOOOOD')
state color
Jane NY blue Steak
Nick TX green Lamb
Aaron FL red Mango
Name: FOOOOOD, dtype: object
Los marcos de datos no tienen este atributo y, de hecho, generará una excepción si se usa así
df.rename('my dataframe')
TypeError: 'str' object is not callable
Antes de pandas 0.21, podría haber usado rename_axis
para cambiar el nombre de los valores en el índice y las columnas. Ha quedado en desuso, así que no hagas esto
rename_axis
método.