Tengo un marco de datos llamado data
. ¿Cómo cambiaría el nombre del único encabezado de columna? Por ejemplo gdp
a log(gdp)
?
data =
y gdp cap
0 1 2 5
1 2 3 9
2 8 7 2
3 3 4 7
4 6 7 7
5 4 8 3
6 8 2 8
7 9 9 10
8 6 6 4
9 10 10 7
Respuestas:
El
rename
programa que acepta un dict como parámetro paracolumns
que solo pase un dict con una sola entrada.Ver también relacionados
fuente
inplace
parámetro, si está ignorando este parámetro, entonces es un error, ¿puedes hacer tiempos con y sin el parámetro, también intenta algo comonew_df = df.rename(columns={'new_name':'old_name'})
y ver si esto es más rápido o noinplace
parámetro casi duplicó el tiempo de 14 segundos a 26 segundos. Pero 14 segundos todavía son bastante tiempo solo para cambiar el encabezado ...Una implementación mucho más rápida sería usar
list-comprehension
si necesita cambiar el nombre de una sola columna.Si surge la necesidad de cambiar el nombre de varias columnas, use expresiones condicionales como:
O bien, construya una asignación utilizando a
dictionary
y realice la operaciónlist-comprehension
con ellaget
estableciendo el valor predeterminado como el nombre antiguo:Tiempos:
fuente
pd.merge_asof()
porque es una expresión :(.Desde v0.24 +, para cambiar el nombre de una (o más) columnas a la vez,
DataFrame.rename()
conaxis=1
oaxis='columns'
(elaxis
argumento fue introducido env0.21
.Index.str.replace()
para reemplazo basado en string / regex.Si necesita cambiar el nombre de TODAS las columnas a la vez,
DataFrame.set_axis()
método conaxis=1
. Pase una secuencia similar a una lista. Las opciones también están disponibles para modificaciones en el lugar.rename
conaxis=1
Con 0.21+, ahora puede especificar un
axis
parámetro conrename
:(Tenga en cuenta que
rename
no está en su lugar de forma predeterminada, por lo que deberá volver a asignar el resultado ).Esta adición se ha realizado para mejorar la coherencia con el resto de la API. El nuevo
axis
argumento es análogo alcolumns
parámetro: hacen lo mismo.rename
también acepta una devolución de llamada que se llama una vez para cada columna.Para este escenario específico, desearía utilizar
Index.str.replace
Similar al
replace
método de cadenas en python, el índice y la serie pandas (solo tipo de objeto) definen unstr.replace
método ("vectorizado") para el reemplazo basado en cadenas y expresiones regulares.La ventaja de esto sobre los otros métodos es que
str.replace
admite expresiones regulares (habilitado por defecto). Vea los documentos para más información.Pasando una lista a
set_axis
conaxis=1
Llame
set_axis
con una lista de encabezado (s). La lista debe tener la misma longitud que el tamaño de las columnas / índice.set_axis
muta el DataFrame original de forma predeterminada, pero puede especificarinplace=False
que devuelva una copia modificada.Nota: En futuras versiones, el
inplace
valor predeterminado seráTrue
.Método de encadenamiento
¿Por qué elegir
set_axis
cuando ya tenemos una manera eficiente de asignar columnasdf.columns = ...
? Como lo muestra Ted Petrou en [esta respuesta], ( https://stackoverflow.com/a/46912050/4909087 )set_axis
es útil cuando se intentan encadenar métodos.Comparar
Versus
La primera es una sintaxis más natural y de flujo libre.
fuente
Hay al menos cinco formas diferentes de cambiar el nombre de columnas específicas en pandas, y las he enumerado a continuación junto con enlaces a las respuestas originales. También cronometré estos métodos y descubrí que funcionan aproximadamente igual (aunque YMMV depende de su conjunto de datos y escenario). El caso de prueba a continuación es para cambiar el nombre de columnas
A
M
N
Z
aA2
M2
N2
Z2
en una trama de datos con las columnasA
aZ
que contiene un millón de filas.Salida:
Use el método que le resulte más intuitivo y más fácil de implementar en su aplicación.
fuente