I'm trying to rename three columns "Devolutiva" that has the same name but isn't working, can u guys help me understand what's happening?
First output
df_fields.columns
Index(['id', 'SPV', 'Estado', 'Produtos', 'Motivo', 'Observações',
'Observações gerais', 'Devolutiva', 'Devolutiva', 'Devolutiva',
'Centro de Custo 1'],
dtype='object')
I tried this:
df_fields = df_fields.rename({df_fields.columns[7] : 'Devolutiva_Ind',
df_fields.columns[8] : 'Devolutiva_Log',
df_fields.columns[9] : 'Devolutiva_Com'})
Tried this:
df_fields = df_fields.rename({'Devolutiva' : 'Devolutiva_Ind',
'Devolutiva' : 'Devolutiva_Log',
'Devolutiva' : 'Devolutiva_Com'})
And also this:
df_fields = df_fields.rename({'Devolutiva_1' : 'Devolutiva_Ind',
'Devolutiva_2' : 'Devolutiva_Log',
'Devolutiva_3' : 'Devolutiva_Com'})
And it keep printing the same .columns output as above, so weird.
Thanks in advance!
CodePudding user response:
Try:
df_fiels.columns = ['id', 'SPV', 'Estado', 'Produtos', 'Motivo', 'Observações',
'Observações gerais', 'Devolutiva_newName1', 'Devolutiva_newName2', 'Devolutiva_newName3', 'Centro de Custo 1']
CodePudding user response:
why it doesn't work?
If you run the following in your python interpreter:
{'Devolutiva' : 'Devolutiva_Ind',
'Devolutiva' : 'Devolutiva_Log',
'Devolutiva' : 'Devolutiva_Com'}
you will realize that only the last value is kept:
{'Devolutiva': 'Devolutiva_Com'}
A dictionary cannot contain duplicate keys. So, you are actually just running:
df_fields.rename({'Devolutiva' : 'Devolutiva_Com'})
how to de-duplicate the column names?
You could use a helper generator:
def suffix():
yield ''
i = 0
while True:
i = 1
yield f'_{i}'
from collections import defaultdict
d = defaultdict(suffix)
df.columns = df.columns.map(lambda x: x next(d[x]))
output:
df.columns
Index(['id', 'SPV', 'Estado', 'Produtos', 'Motivo', 'Observações',
'Observações gerais', 'Devolutiva', 'Devolutiva_1', 'Devolutiva_2',
'Centro de Custo 1'],
dtype='object')
