根据字典重命名PANDAS中的列

Posted

技术标签:

【中文标题】根据字典重命名PANDAS中的列【英文标题】:Rename columns in PANDAS based on dictionary 【发布时间】:2016-07-31 14:39:10 【问题描述】:

我有一个数据框,我想根据我计划用作字典的另一个数据框重命名列。例如,我的第一个数据框是:

          AAA   BBB   CCC   DDD
 index   
  1       1     2     3     4
  2       5     6     7     8

作为我想用作字典的第二个数据框:

           val1    val2
  index
    1      AAA      A7
    2      BBB      B0
    3      CCC      C3
    4      DDD      D1

我想要得到的结果如下:

          A7    B0    C3    D1 
 index   
  1       1     2     3     4
  2       5     6     7     8

最初我想将第一个数据帧重新整形为长格式,然后与字典数据帧合并,然后重新整形为宽格式。但是我认为这是非常低效的,所以我想使用一种更有效的方式(如果存在的话)。非常感谢四位您的帮助。

【问题讨论】:

您是否只想根据第二个数据框重命名列? 感谢您的回复。是的,这是正确的,根据第二个数据框更改第一个数据框列名称。 你也可以只用这一行:df1.columns=[df2['val2']] Joe,您在注释中的代码是按位置重命名的,而不是按名称重命名的,这很少是想要的效果。 【参考方案1】:

df.rename 有一个名为 columns 的参数,它接受字典:

df.rename(columns=dict(zip(df2["val1"], df2["val2"])))

输出:

    A7  B0  C3  D1
0   1   2   3   4
1   5   6   7   8

它返回一个新的DataFrame。您可以使用inplace=True,也可以将其分配回原始DataFrame。

【讨论】:

或更简单:df1.rename(columns=dict(df2.values))。【参考方案2】:

我认为你可以先从df2 创建dictionary,然后从df1 的列中创建Series to_series,然后使用map 使用dictionary

print df1
       AAA  BBB  CCC  DDD
index                    
1        1    2    3    4
2        5    6    7    8

print df2
      val1 val2
index          
1      AAA   A7
2      BBB   B0
3      CCC   C3
4      DDD   D1

d = df2.set_index('val1').to_dict()
print d['val2']
'AAA': 'A7', 'BBB': 'B0', 'CCC': 'C3', 'DDD': 'D1'

df1.columns = df1.columns.to_series().map(d['val2'])
print df1
       A7  B0  C3  D1
index                
1       1   2   3   4
2       5   6   7   8

【讨论】:

成功了,再次感谢您的回复和及时!【参考方案3】:

你也可以只用这一行:

df1.columns=[df2['val2']]

输出:

    A7  B0  C3  D1
0   1   2   3   7
1   5   6   7   8

【讨论】:

这不是通过字典重命名,即旧名称 => 新名称。您的解决方案按位置重命名列。

以上是关于根据字典重命名PANDAS中的列的主要内容,如果未能解决你的问题,请参考以下文章

使用 Pandas 从查找字典中重命名多索引行

如何使用列表重命名熊猫中的列

用名称中的句点重命名clickhouse中的列

为啥我重命名后无法访问 pandas 中的列? [复制]

数据透视表列重命名

是否可以直接重命名存储在 hdf5 文件中的 pandas 数据框的列?