我有一个带有一组标签和标签名的数据框,以及一个带有按标签的列名的数据框。标签列表的长度为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中找不到该索引标签以及如何解决此问题。有人可以帮忙吗?
答案 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 /系列中将保持不变。列出的多余标签不会抛出 错误。