I have the following dataframe:
df2 = pd.DataFrame({'date' : ['2020-08-01', '2020-09-01', '2020-10-01'], 'd1_ads' : [3, 5, 6],'d7_ads' : [8, 9, 15], 'd30_ads' : [12, 10, 22]})
And I want to remove the first letter d from the columns d1_ads, d7_ads and d30_ads. The first column date should remain like that, with the letter d. I have tried this code to achieve this:
df2.iloc[:,1:3].columns.str.lstrip("d")
And this is what I get:
Index(['1_iap', '7_iap', '30_iap',],
dtype='object')
But when I try to save it on the dataframe, it is not working:
df2.iloc[:,1:3].columns = df2.iloc[:,1:3].columns.str.lstrip("d")
And my columns remain the same:
df2 = pd.DataFrame({'date' : ['2020-08-01', '2020-09-01', '2020-10-01'], 'd1_ads' : [3, 5, 6],'d7_ads' : [8, 9, 15], 'd30_ads' : [12, 10, 22]})
This would be the expected output:
df2 = pd.DataFrame({'date' : ['2020-08-01', '2020-09-01', '2020-10-01'], '1_ads' : [3, 5, 6],'7_ads' : [8, 9, 15], '30_ads' : [12, 10, 22]})
What am I doing wrong? It seems it is not saving the changes correctly.
Thanks
>Solution :
Use df.rename(…) to rename columns. You’ll have to create a dict which maps the name: {‘old’: ‘new’}
df2.rename(columns={i: i.lstrip("d") for i in df2.iloc[:,1:4].columns},
inplace=True)
# print(df2.to_markdown())
| date | 1_ads | 7_ads | 30_ads | |
|---|---|---|---|---|
| 0 | 2020-08-01 | 3 | 8 | 12 |
| 1 | 2020-09-01 | 5 | 9 | 10 |
| 2 | 2020-10-01 | 6 | 15 | 22 |