Pandas переименовывает столбцы

#pandas #rename

#pandas #переименовать

Вопрос:

Это столбцы моего фрейма данных:

     col_list= df1.columns
    Out:

    Index([              nan,               nan,        'Estimate',
   'Margin of Error',         'Percent', 'Margin of Error',
          'Estimate', 'Margin of Error',         'Percent',
   'Margin of Error',        'Estimate', 'Margin of Error',
           'Percent', 'Margin of Error',        'Estimate',
   'Margin of Error',         'Percent', 'Margin of Error',
          'Estimate', 'Margin of Error',         'Percent',
   'Margin of Error',        'Estimate', 'Margin of Error',
           'Percent', 'Margin of Error',        'Estimate',
   'Margin of Error',         'Percent', 'Margin of Error',
          'Estimate', 'Margin of Error',         'Percent',
   'Margin of Error',        'Estimate', 'Margin of Error',
           'Percent', 'Margin of Error',        'Estimate',
   'Margin of Error',         'Percent', 'Margin of Error'],
  dtype='object', name=3)
  

Я пытаюсь переименовать имена первых двух столбцов:

     df2= df1.rename(columns={df1.columns[0]:'State', df1.columns[1]:'coverage'})
  

Но оба столбца переименовываются в ‘coverage’

Однако, когда я пытаюсь просмотреть имена отдельных столбцов, такие как:

    col[0]
   Out: nan
   col[1]
   Out:nan
   col[3]
   Out: 'Estimate'
  

Он восстанавливает правильные позиции.
Даже когда я пытаюсь переименовать только первые столбцы как,

     df2= df1.rename(columns={df1.columns[0]:'State'})
  

Имена первых столбцов изменяются на ‘State’:

     Index(['State', 'State', 'Estimate', 'Margin of Error', 'Percent',
   'Margin of Error', 'Estimate', 'Margin of Error', 'Percent',
   'Margin of Error', 'Estimate', 'Margin of Error', 'Percent',
   'Margin of Error', 'Estimate', 'Margin of Error', 'Percent',
   'Margin of Error', 'Estimate', 'Margin of Error', 'Percent',
   'Margin of Error', 'Estimate', 'Margin of Error', 'Percent',
   'Margin of Error', 'Estimate', 'Margin of Error', 'Percent',
   'Margin of Error', 'Estimate', 'Margin of Error', 'Percent',
   'Margin of Error', 'Estimate', 'Margin of Error', 'Percent',
   'Margin of Error', 'Estimate', 'Margin of Error', 'Percent',
   'Margin of Error'],
  dtype='object', name=3)
  

Не уверен, что здесь происходит.

Комментарии:

1. Первые два столбца имеют nan в качестве столбца (одинаковое значение), решение, которое я бы вам предложил, — переназначить все столбцы, выполнив это df.columns = [‘State’, ‘coverage’] df.columns[2:]

Ответ №1:

В этой строке:

 df2= df1.rename(columns={df1.columns[0]:'State', df1.columns[1]:'coverage'})
  

df1.columns[0] и df1.columns[1] получает значение имени 0-го 1-го столбца, которое является nan для обоих. Таким образом, это эквивалентно:

 df2= df1.rename(columns={'nan':'State', 'nan':'coverage'})
  

Поскольку клавиша ‘nan’ появляется дважды, второе назначение имеет приоритет.

Обходной путь заключается в переименовании всех столбцов одновременно:

 col_list= df1.columns.to_list()
col_list[0] = 'State'
col_list[1] = 'coverage'
df1.columns = col_list
  

или однострочным (по предложению @IWHKYB):

 df1.columns = ['State', 'coverage']   df1.columns[2:].to_list()
  

Комментарии:

1. df1.columns = [‘State’, ‘coverage’] df1.columns[2:] Выдал мне эту ошибку: ошибка значения: несоответствие длины: ожидаемая ось содержит 42 элемента, новые значения содержат 40 элементов. Кроме того, я ранее пробовал col_list[0]= ‘State’. Это привело к: TypeError: Index не поддерживает изменяемые операции, поэтому я просто использовал ту же логику и присвоил столбцам список: df1.columns = [‘Состояние’, ‘Охват’, ‘Оценка’, ‘Предел погрешности’, ‘Процент’, ‘Предел погрешности’, ‘Оценка’, ‘Предел погрешности’, ‘Процент’, ‘Предел погрешности’ …]

2. Ahh Index ведет себя не совсем как список. Отредактировано для добавления to_list() вызовов.