Tengo un marco de datos llamado data. ¿Cómo cambiaría el nombre del único encabezado de columna? Por ejemplo gdpa 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
renameprograma que acepta un dict como parámetro paracolumnsque solo pase un dict con una sola entrada.Ver también relacionados
fuente
inplacepará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 noinplacepará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-comprehensionsi 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
dictionaryy realice la operaciónlist-comprehensioncon ellagetestableciendo 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=1oaxis='columns'(elaxisargumento 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.renameconaxis=1Con 0.21+, ahora puede especificar un
axisparámetro conrename:(Tenga en cuenta que
renameno 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
axisargumento es análogo alcolumnsparámetro: hacen lo mismo.renametambié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.replaceSimilar al
replacemétodo de cadenas en python, el índice y la serie pandas (solo tipo de objeto) definen unstr.replacemétodo ("vectorizado") para el reemplazo basado en cadenas y expresiones regulares.La ventaja de esto sobre los otros métodos es que
str.replaceadmite expresiones regulares (habilitado por defecto). Vea los documentos para más información.Pasando una lista a
set_axisconaxis=1Llame
set_axiscon una lista de encabezado (s). La lista debe tener la misma longitud que el tamaño de las columnas / índice.set_axismuta el DataFrame original de forma predeterminada, pero puede especificarinplace=Falseque devuelva una copia modificada.Nota: En futuras versiones, el
inplacevalor predeterminado seráTrue.Método de encadenamiento
¿Por qué elegir
set_axiscuando ya tenemos una manera eficiente de asignar columnasdf.columns = ...? Como lo muestra Ted Petrou en [esta respuesta], ( https://stackoverflow.com/a/46912050/4909087 )set_axises ú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
AMNZaA2M2N2Z2en una trama de datos con las columnasAaZque 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