Cambiar un nombre de columna específico en pandas DataFrame

Estaba buscando una forma elegante de cambiar el nombre de una columna específica en un DataFrame .

jugar datos …

 import pandas as pd d = { 'one': [1, 2, 3, 4, 5], 'two': [9, 8, 7, 6, 5], 'three': ['a', 'b', 'c', 'd', 'e'] } df = pd.DataFrame(d) 

La solución más elegante que he encontrado hasta ahora …

 names = df.columns.tolist() names[names.index('two')] = 'new_name' df.columns = names 

Esperaba un sencillo de una sola línea … este bash falló …

 df.columns[df.columns.tolist().index('one')] = 'another_name' 

Cualquier consejo recibido con gratitud.

Existe un trazador de líneas:

 In [27]: df=df.rename(columns = {'two':'new_name'}) In [28]: df Out[28]: one three new_name 0 1 a 9 1 2 b 8 2 3 c 7 3 4 d 6 4 5 e 5 

A continuación se encuentra la cadena de documentación para el método de rename .

 Definición: df.rename (self, index = None, column = None, copy = True, inplace = False)
 Docstring:
 Alterar el índice y / o las columnas usando la función de entrada o
 funciones  Los valores de función / dict deben ser únicos (1 a 1).  Etiquetas no
 contenido en un dict / Series se dejará como está.

 Parámetros
 ----------
 índice: dict-like o función, opcional
     Transformación para aplicar a los valores de índice.
 columnas: dict-like o función, opcional
     Transformación para aplicar a valores de columna.
 copia: booleano, por defecto verdadero
     También copia datos subyacentes
 en el lugar: booleano, por defecto Falso
     Si devolver un nuevo DataFrame.  Si es verdadero, entonces el valor de la copia es
     ignorado

 Ver también
 --------
 Serie.rename

 Devoluciones
 -------
 renombrado: DataFrame (nuevo objeto)

Como el argumento inplace está disponible, no es necesario que copie y asigne el dataframe original a sí mismo, pero haga lo siguiente:

 df.rename(columns={'two':'new_name'}, inplace=True) 

¿Qué pasa?

 df.columns.values[2] = "new_name" 

Pandas 0.21 ahora tiene un parámetro de eje

El método de cambio de nombre ha obtenido un parámetro de eje para coincidir con la mayoría del rest de la API de pandas.

Así que, además de esto:

 df.rename(columns = {'two':'new_name'}) 

Tu puedes hacer:

 df.rename({'two':'new_name'}, axis=1) 

o

 df.rename({'two':'new_name'}, axis='columns') 

Si sabe qué columna # es (primero / segundo / noveno), esta solución publicada en una pregunta similar funciona independientemente de si tiene nombre o no, y en una línea: https://stackoverflow.com/a/26336314/ 4355695

 df.rename(columns = {list(df)[1]:'new_name'}, inplace=True) # 1 is for second column (0,1,2..) 

Para cambiar el nombre de las columnas, aquí está el sencillo que funcionará tanto para las columnas Default(0,1,2,etc;) como para las existentes, pero no es muy útil para conjuntos de datos más grandes (con muchas columnas).

Para un conjunto de datos más grande, podemos dividir las columnas que necesitamos y aplicar el siguiente código:

 df.columns = ['new_name','new_name1','old_name'] 

pandas version 0.23.4

 df.rename(index=str,columns={'old_name':'new_name'},inplace=True) 

Para el registro:

omitiendo index = str dará error reemplazar tiene un argumento inesperado ‘columnas’

El siguiente código corto puede ayudar:

 df3 = df3.rename(columns={c: c.replace(' ', '') for c in df3.columns}) 

Eliminar espacios de columnas.

Otra opción sería simplemente copiar y soltar la columna:

 df = pd.DataFrame(d) df['new_name'] = df['two'] df = df.drop('two', axis=1) df.head() 

Después de eso obtienes el resultado:

  one three new_name 0 1 a 9 1 2 b 8 2 3 c 7 3 4 d 6 4 5 e 5