根据字典重命名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中的列的主要内容,如果未能解决你的问题,请参考以下文章