Панды Переименование столбцов - PullRequest
0 голосов
/ 20 марта 2019

Это столбцы моего DataFrame:

    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'})

Но оба столбца переименованы в «покрытие»

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

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

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

    df2= df1.rename(columns={df1.columns[0]:'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 Ответ

1 голос
/ 20 марта 2019

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

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()
...