Как переименовать несколько фреймов данных в одном цикле с общим словарем?

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

Я знаю, как это сделать для одного кадра данных за раз, используя функцию переименования панд, например:

df = df.rename(columns = {"1": "a", etc.})

Я хотел бы добавить цикл для каждого фрейма данных из списка фреймов данных (df_list), но по какой-то причине он не работает так, как я ожидал.

df_list = (df1, df2)

for i in df_list:

   i = i.rename(columns = {
    '1':'a',
    '2':'b',
    '3':'c', etc.})

Приведенный выше код не дает никаких ошибок и ничего не меняет. Опять же, и df1, и df2 имеют одинаковую структуру (столбцы = «1», «2», «3» и т. д.).

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

добавить inplace=True в функцию переименования

vb_rises 27.05.2019 15:56

Используйте список df_list = [df1, df2]

Mohit Motwani 27.05.2019 15:57

Спасибо вам обоим. Хотя переход от кортежа к списку, безусловно, хорошо, он не решил мою проблему в одиночку. Использование inplace = True сделало.

mikacrem 27.05.2019 16:04
1
3
1 067
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы пытаетесь изменить неизменяемый кортеж. Вместо этого используйте список:

df_list = [df1, df2]

for i in df_list:

   i = i.rename(columns = {
  '1':'a',
  '2':'b',
  '3':'c', ...})

Большое спасибо, вместе с inplace=True это решило мою проблему.

mikacrem 27.05.2019 16:04

Какая у вас версия панды? inplace=True не требуется, потому что вы создаете копию, когда назначаете i = i.rename

micric 27.05.2019 16:17

Ну и заметил потом, что действительно, inplace=true не нужен. Просто пришлось применить это к моей реальной работе, а не к примеру. Моя версия панд — «0.23.4». Спасибо

mikacrem 27.05.2019 17:14

Другие вопросы по теме