Home > front end >  column not found while renaming in panda dataframe
column not found while renaming in panda dataframe

Time:10-05

I have this panda dataframe

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

And I Am trying to replace the columnm name with new name as mapped in an excel file like this

     OldId           NewId
     EG2021        LER_EG2021
     EGH2021       LER_EGH2021

I tried below code but its not working I get the error as

KeyError: "None of [Index(['LER_EG2021',LER_EGH2021'],\n
dtype='object', length=186)] are in the [columns]

Code:

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)

Any idea what wrong am I doing??

CodePudding user response:

You need:

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

Or:

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

dtest_df output:

    timestamp    LER_EG2021   LER_EGH2021
0  2021-01-04            33           NaN
1  2021-02-04            45            65

CodePudding user response:

Another way, dict the zip of the df with the Old and New ids

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
  • Related