Tengo un archivo csv sin encabezado, con un índice DateTime. Quiero cambiar el nombre del índice y el nombre de la columna, pero con df.rename () solo se cambia el nombre de la columna. ¿Insecto? Estoy en la versión 0.12.0
In [2]: df = pd.read_csv(r'D:\Data\DataTimeSeries_csv//seriesSM.csv', header=None, parse_dates=[[0]], index_col=[0] )
In [3]: df.head()
Out[3]:
1
0
2002-06-18 0.112000
2002-06-22 0.190333
2002-06-26 0.134000
2002-06-30 0.093000
2002-07-04 0.098667
In [4]: df.rename(index={0:'Date'}, columns={1:'SM'}, inplace=True)
In [5]: df.head()
Out[5]:
SM
0
2002-06-18 0.112000
2002-06-22 0.190333
2002-06-26 0.134000
2002-06-30 0.093000
2002-07-04 0.098667
rename_axis
método.df.rename_axis("Date", axis='index', inplace=True)
según la documentación pandas.pydata.org/pandas-docs/stable/generated/… odf.index.names = ['Date']
Respuestas:
El
rename
método toma un diccionario para el índice que se aplica a los valores del índice .Desea cambiar el nombre al nombre del nivel de índice:
Una buena manera de pensar en esto es que las columnas y el índice son el mismo tipo de objeto (
Index
oMultiIndex
), y puede intercambiar los dos mediante transposición.Esto es un poco confuso ya que los nombres de índice tienen un significado similar a las columnas, así que aquí hay algunos ejemplos más:
Puede ver el cambio de nombre en el índice, que puede cambiar el valor 1:
Mientras renombra los nombres de nivel:
Nota: este atributo es solo una lista, y puede cambiar el nombre como una lista de comprensión / mapa.
fuente
"inplace =True"
,df1.rename
realmente no cambiaría nada.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
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'.
El
rename_axis
método también tiene la capacidad de cambiar los nombres de nivel de columna cambiando elaxis
parámetro: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:
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.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
Podemos usar de
rename_axis
manera similar a como lo hicimos con DataFramesObserve 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 cambiarloLos marcos de datos no tienen este atributo y, de hecho, generará una excepción si se usa así
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 estofuente
df1 = df.set_index(['state', 'color'], append=True)
condf1.rename_axis(['names', None, 'Colors'])
?Para
pandas
versiones mas nuevaso
Esto último es necesario si un marco de datos debe conservar todas sus propiedades.
fuente
En Pandas versión 0.13 y superior, los nombres de nivel de índice son inmutables (tipo
FrozenList
) y ya no se pueden establecer directamente. Primero debe usarIndex.rename()
para aplicar los nuevos nombres de nivel de índice al Índice y luego usarDataFrame.reindex()
para aplicar el nuevo índice al Marco de datos. Ejemplos:Para la versión de Pandas <0.13
Para la versión de Pandas> = 0.13
fuente
index
ocolumn
directamente está cambiando para mí (en Pandas 0.19), pero no con este método.También puede usar
Index.set_names
lo siguiente:fuente
multiIndex
?MultiIndex(levels=[['A', 'B', 'C', 'D', 'E', 'F'], ['Y', 'Z']], labels=[[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]], names=['Portfolio', None])
¿Es posible cambiar el nombre deNone
ameasures
?Si desea utilizar la misma asignación para cambiar el nombre de las columnas y el índice, puede hacer lo siguiente:
fuente
Es el único que hace el trabajo por mí (pandas 0.22.0).
Sin inplace = True, el nombre del índice no está configurado en mi caso.
fuente
puedes usar
index
ycolumns
atributos depandas.DataFrame
. NOTA: el número de elementos de la lista debe coincidir con el número de filas / columnas.fuente