2016-04-29 46 views
0

我有一个数据框,并希望基于每个键具有多个值的字典来重命名列。字典键具有所需的列名称,并且这些值包含可能的旧列名称。列名称没有模式。重命名具有多个值字典的列

import pandas as pd 
column_dict = {'a':['col_a','col_1'], 'b':['col_b','col_2'], 'c':'col_c','col_3']} 

df = pd.DataFrame([(1,2.,'Hello'), (2,3.,"World")], columns=['col_1', 'col_2', 'col_3']) 

功能,以取代与关键

def replace_names(text, dict): 
    for key in dict: 
    text = text.replace(dict[key],key) 
return text 


replace_names(df.columns.values,column_dict) 

文本列名

AttributeError: 'numpy.ndarray' object has no attribute 'replace' 

调用时给出了一个错误是否有另一种方式做到这一点?

回答

2

如果您提供的旧列名称映射到新的列名的字典可以使用df.rename(columns=...)

import pandas as pd 
column_dict = {'a':['col_a','col_1'], 'b':['col_b','col_2'], 'c':['col_c','col_3']} 
df = pd.DataFrame([(1,2.,'Hello'), (2,3.,"World")], columns=['col_1', 'col_2', 'col_3']) 

col_map = {col:key for key, cols in column_dict.items() for col in cols} 
df = df.rename(columns=col_map) 

产生

a b  c 
0 1 2.0 Hello 
1 2 3.0 World 
+0

完美,更简单! –

+0

如果解决了原始问题,则应将此答案标记为“已接受”。 – Thanos

相关问题