Cambiando múltiples nombres de columnas pero no todos ellos – Pandas Python

Me gustaría saber si hay una función para cambiar nombres de columna específicos pero sin seleccionar un nombre específico o sin cambiarlos todos.

Tengo el codigo

df=df.rename(columns = {'nameofacolumn':'newname'}) 

Pero con eso tengo que cambiar manualmente cada uno de ellos escribiendo cada nombre. También para cambiar todas las que tengo.

 df = df.columns['name1','name2','etc'] 

Me gustaría tener una función para cambiar las columnas 1 y 3 sin escribir sus nombres simplemente indicando su ubicación. ¡Gracias!

Puede utilizar una comprensión de dict y pasar esto para rename :

 In [246]: df = pd.DataFrame(columns=list('abc')) new_cols=['d','e'] df.rename(columns=dict(zip(df.columns[1:], new_cols)),inplace=True) df Out[246]: Empty DataFrame Columns: [a, d, e] Index: [] 

También funciona si pasas una lista de posiciones ordinales:

 df.rename(columns=dict(zip(df.columns[[1,2]], new_cols)),inplace=True) 

diga que tiene un diccionario de los nuevos nombres de columna y el nombre de la columna que deben reemplazar:

 df.rename(columns={'old_col':'new_col', 'old_col_2':'new_col_2'}, inplace=True) 

Pero, si no tienes eso, y solo tienes los índices, puedes hacer esto:

 column_indices = [1,4,5,6] new_names = ['a','b','c','d'] old_names = df.columns[column_indices] df.rename(columns=dict(zip(old_names, new_names)), inplace=True) 

No es necesario utilizar el método de cambio de nombre en absoluto.

Simplemente reemplaza los nombres de columna antiguos por otros nuevos usando listas. Para cambiar el nombre de las columnas 1 y 3 (con el índice 0 y 2), haga algo como esto:

df.columns.values[[0, 2]] = ['newname0', 'newname2']

o posiblemente si está utilizando una versión más antigua de pandas que 0.16.0, puede:

df.keys().values[[0, 2]] = ['newname0', 'newname2']

La ventaja de este enfoque es que no necesita copiar todo el dataframe con la syntax df = df.rename , solo cambia los valores del índice.

Debería poder hacer referencia a las columnas por índice utilizando ..df.columns [índice]

 >> temp = pd.DataFrame(np.random.randn(10, 5),columns=['a', 'b', 'c', 'd', 'e']) >> print(temp.columns[0]) a >> print(temp.columns[1]) b 

Entonces, para cambiar el valor de columnas específicas, primero asigne los valores a una matriz y cambie solo los valores que desee

 >> newcolumns=temp.columns.values >> newcolumns[0] = 'New_a' 

Asigne la nueva matriz a las columnas y tendrá lo que necesita

 >> temp.columns = newcolumns >> temp.columns >> print(temp.columns[0]) New_a