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