熊猫重命名列

时间:2019-03-20 17:20:58

标签: pandas rename

这些是我的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'})

但是这两列都重命名为“ 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 个答案:

答案 0 :(得分:1)

在这一行:

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

df1.columns[0]df1.columns[1]正在获取第0 \ 1st列的名称值,两者均为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()