【问题标题】:Changing with header names from a merged pandas dataframe从合并的 pandas 数据框中更改标题名称
【发布时间】:2019-02-15 01:13:02
【问题描述】:

我有一个使用 pandas 创建的数据透视表(名为“预算”)。如下所示。

               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')

budgets 和 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

如您所见,列名现在是 ('Current Budget', 'C') 和 ('Current Budget', 'D')。由于某些原因,我无法使用这些键。它带来了一个关键错误。因此,我试图通过替换列名

merged.columns = merged.columns.str.replace("('Current Budget', 'D')", "")

但是即使我尝试只替换一个,此命令也会删除('Current Budget','D')和('Current Budget','C')的标题名称。我不明白为什么两者都被删除。

如果回答以下两个问题之一,我想我可以解决我的问题。

  1. 如何删除“预算”中的“当前预算”标题?

budget.iloc[0] 表示 (AA 645000 90000) 的行,而不是“当前预算”。

  1. 如何更改合并数据框中的列名?

merged["Design_Budget"] = merge["('Current Budget', 'D')"] 带来 KeyError: 'Current Budget'

merged.columns = merge.columns.str.replace() 不起作用。它只是删除两者的列名。

merged = merge.rename(columns={"('Current Budget', 'D')": "D", "('Current Budget', 'C')": "C"}) 不变任何。

【问题讨论】:

  • 您希望保留哪些列?即[“项目名称”,“D”,“C”]?

标签: pandas dataframe merge header rename


【解决方案1】:

通常,您应该避免使用任何“特殊字符”(即在语言中具有除字符串以外的含义的字符)给列名。

重命名列的最简单方法是使用以下内容

 merged.columns =  ["Project Name","D","C"]

第一个数据帧有一个分层索引,你也可以像这样删除它

budgets.columns = budgets.columns.get_level_values(0)

但我认为前者更短。

【讨论】:

  • 谢谢!对于第一个解决方案,我可以只命名其中一个列,例如 merge.columns[2] = ['C']?我看到一个错误,想知道是否有任何类似的事情要做。第二个解决方案完美地工作!
  • 可以尝试 df.columns.values[1] = "C" 其中 values[1] 表示数据帧中列的位置。
猜你喜欢
  • 2020-12-02
  • 2021-08-28
  • 2022-01-03
  • 2015-04-17
  • 2023-03-23
  • 2016-10-17
  • 2019-04-19
  • 2017-06-27
  • 1970-01-01
相关资源
最近更新 更多