Tengo este marco de datos panda

timestamp    EG2021   EGH2021
2021-01-04    33        Nan
2021-02-04    45        65

Y estoy tratando de reemplazar el nombre de la columna con el nuevo nombre asignado en un archivo de Excel como este

     OldId           NewId
     EG2021        LER_EG2021
     EGH2021       LER_EGH2021

Intenté el siguiente código pero no funciona, aparece el error como

KeyError: "Ninguno de [Index (['LER_EG2021', LER_EGH2021 '], \ n
dtype = 'object', length = 186)] están en las [columnas]

Código:

df = pd.ExcelFile('ids.xlsx').parse('Sheet1')
x=[]
x.append(df['external_ids'].to_list())
dtest_df = (my panda dataframe as mentioned above)
mapper = df.set_index(df['oldId'])[df['NewId']]
dtest_df.columns = dtest_df.columns.Series.replace(mapper)

¿Alguna idea de qué estoy haciendo mal?

0
ZZZSharePoint 5 oct. 2021 a las 10:48

2 respuestas

La mejor respuesta

Te hace falta:

mapper = df.set_index('oldId')['NewId']
dtest_df.columns = dtest_df.columns.map(mapper.to_dict())

O:

dtest_df = dtest_df.rename(columns=df.set_index('oldId')['NewId'].to_dict())

Salida de dtest_df:

    timestamp    LER_EG2021   LER_EGH2021
0  2021-01-04            33           NaN
1  2021-02-04            45            65
1
U12-Forward 5 oct. 2021 a las 08:12

De otra manera, dict el zip del df con los identificadores antiguos y nuevos.

dtest_df.rename(columns=dict(zip(df['OldId'], df['NewId'])), inplace=True)



 timestamp       LER_EG2021   LER_EGH2021
0  2021-01-04          33         Nan
1  2021-02-04          45          65
0
wwnde 5 oct. 2021 a las 08:03