我有一个使用熊猫创建的数据透视表(名为“预算”)。看起来如下。
Current Budget
Type C D
Project Name
AA 645000 90000
BB 664039 73456
CC 994654 56398
DD 3290090.46 95000
我使用
将这个数据框与另一个数据框(名为“ ws_project”)合并merged = pd.merge(budgets, ws_project, on=['Project Name'],how='inner')
预算和ws_project具有相同的列['Project Name'],因此我使用此列将两者合并。
这是合并数据框的外观
Project Name ('Current Budget', 'C') ('Current Budget', 'D') Project Status
0 AA 645000 90000 Active
1 BB 664039 73456 Active
2 CC 994654 56398 Active
3 DD 3290090.46 95000 Active
如您所见,列名称现在为(“当前预算”,“ C”)和(“当前预算”,“ D”)。由于某些原因,我无法使用这些键。它带来了一个关键错误。因此,我尝试通过直通
替换列名merged.columns = merged.columns.str.replace("('Current Budget', 'D')", "")
但是,即使我只尝试替换一个,此命令也会删除两个标题的标题(“当前预算”,“ D”)和(“当前预算”,“ C”)。我不明白为什么两个都被删除。
如果回答以下两个问题之一,我可以解决我的问题。
budget.iloc [0]表示(AA 645000 90000)的行,而不是“当前预算”。
merged [“ Design_Budget”] = merged [“(('Current Budget','D')”]带来KeyError:'Current Budget'
merged.columns = merged.columns.str.replace()不起作用。只是删除了两者的列名。
merged = merged.rename(columns = {“('Current Budget','D')”:“ D”,“('Current Budget','C')”:“ C”})不变任何。
答案 0 :(得分:1)
通常,您应避免给列名加上任何“特殊字符”,即,除语言中的字符串以外具有其他含义的字符。
重命名列的最简单方法是使用以下内容
merged.columns = ["Project Name","D","C"]
第一个dataFrame具有分层索引,您也可以像这样删除
budgets.columns = budgets.columns.get_level_values(0)
但是我认为前者要短一些。