在其他数据框中搜索匹配项,然后将列重命名为匹配项

时间:2018-10-02 14:37:25

标签: python pandas dataframe indexing

我有一个带有一组标签和标签名的数据框,以及一个带有按标签的列名的数据框。标签列表的长度为175个项目,输入的列列表的长度为60个项目。我希望将列名从标签重命名为标签名。为此,我正在执行以下操作:

import pandas as pd

df_input = pd.read_excel(r'C://Users//..//*.xlsx')
df_tags = pd.read_excel(r'C://Users//..//*.xlsx')
old_names = df_input.columns
new_names = []
tag = df_tags.iloc[:][0]


for i in range(0,len(df_input.columns)):
    for j in range(0,len(df_tags)):
        if df_input.columns[i] == df_tags.iloc[j][0]:
            new_names.append(df_tags.loc[j][1])

df_input.rename(columns=dict(zip(old_names, new_names)), inplace=True)

但是,我收到这样的错误: KeyError:“标签[122]不在[索引]中”

我不了解在哪个索引标签122中找不到该索引标签以及如何解决此问题。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

pd.DataFrame.rename

避免与熊猫进行显式for循环。您可以将pd.DataFrame.rename与一系列输入配合使用:

df_input = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
df_tags = pd.DataFrame({'in_col': ['A', 'C', 'D'], 'out_col': ['X', 'Y', 'Z']})

df_input = df_input.rename(columns=df_tags.set_index('in_col')['out_col'])

print(df_input)

   X  B  Y
0  1  4  7
1  2  5  8
2  3  6  9

rename方法用途广泛且宽松。如文档所述:

  

功能/字典值必须唯一(1对1)。不包含标签   在dict /系列中将保持不变。列出的多余标签不会抛出   错误。