Переименовать столбцы в Pandas Dataframe со словарем формы значений - PullRequest
1 голос
/ 09 июля 2020

У меня есть pandas фрейм данных, прочитанный из файла Excel. Примечание : имена столбцов остаются прежними, но положение столбца может отличаться в файле Excel.

df

    colA    colB    colC   ...
0   val11   val12   val13  ... 
1   val21   val22   val23  ...
... ... ...

I есть список словарей, которые следует использовать для изменения имен столбцов, как показано ниже

field_map

    [{"file_field" : "colA" , "table_field" : "tab1"},
     {"file_field" : "colB" , "table_field" : "tab2"},
     {"file_field" : "colC" , "table_field" : "tab3"},
      ... ... ...]

Я мог бы преобразовать ключи столбца для каждой строки в DataFrame отдельно таким образом и с помощью new_dt для дальнейших операций.

file_dt = df.to_dict("records")

for each_entry in file_dt:
    new_dt = {}
    for field in field_map:      
        new_dt[field['table_field'] = each_entry[field['file_field']]
    ... ... ...

Этот метод занимает слишком много времени, когда мой файл большой.

Я хочу изменить столбец заголовки фрейма данных перед дальнейшей обработкой записей, это сократит для меня много времени обработки. Пожалуйста, помогите мне с этим. Я ожидаю, что фрейм данных будет примерно таким

Ожидаемый df

    tab1    tab2    tab3   ...
0   val11   val12   val13  ... 
1   val21   val22   val23  ...
... ... ...

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 09 июля 2020

Просто используйте функцию rename в существующем фрейме данных df:

df = df.rename(columns={"colA":"tab1", "colB":"tab2", "colB":"tab3"})

Вам нужно немного изменить словарь field_map:

col_rename_dict = {el["file_field"]:el["table_field"] for el in field_map}
df = df.rename(columns=col_rename_dict)
1 голос
/ 09 июля 2020

Если вы измените свой field_map, вы можете просто передать его df.rename как:

field_map = {x['file_field']:x['table_field'] for x in field_map}
df = df.rename(columns=field_map)

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...