python - Pandas 不会重命名多索引列名

标签 python pandas dataframe rename multi-index

我刚刚花了几个小时试图让它工作,我开始认为我想要不可能的事情,尽管我很确定它可以完成。我有一个 pandas 数据框,它有一个多索引标题(excel 电子表格,3 行标题)。我肯定在看它,所以我知道它存在,但是当我尝试根据官方文档重命名列时,我被告知找不到列名。

表格如下所示:

Test              | Test1         | Test2
                  | abc   | xyz   | abc   | xyz
geo1    | geo2    | geo1  | geo2  | geo1  | geo2
------------------------------------------------
a       | x       | 1     | 0.5   | 1     | 0.5
b       | y       | 2     | 0.2   | 2     | 0.2
c       | z       | 3     | 0.4   | 3     | 0.3

例如,我只是想将“Test”更改为“Boom”。 test 是 level 0 中列名的第一个值,但它不起作用。我使用了其中之一:

df.rename(columns={df.columns[0][0]: 'Boom'}, inplace=True, errors='raise')
df.rename(columns={df.columns[0][0]: 'Boom'}, level=0, inplace=True, errors='raise')
df.rename(columns={df.columns.values[0][0]: 'Boom'}, inplace=True, errors='raise')

问题是,即使我对列名和级别进行硬编码,它仍然不起作用!这应该可以解决问题,因为它适用于我的其他脚本(2 级,而不是 3 级):

df.rename(columns={'Test': 'Boom'}, level=0, inplace=True, errors='raise')

这个错误很有趣,因为它告诉我它找不到“测试”列(它实际上是在告诉我它找不到它刚刚命名的列...)。我做错了什么??

谢谢大家!

最佳答案

df.columns.set_levels(['Boom1','Boom2','Boom3'],level=0,inplace=True)

如果您的列是 Boom1, ..., Boom1000,首先创建一个名称列表

ll = [f"Boom{i}" for i in range(1,1001)]
df.columns.set_levels(ll,level=0,inplace=True)

关于python - Pandas 不会重命名多索引列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61879597/

相关文章:

python - 在pygame中用鼠标获取世界坐标

Python,virtualenv - 是否可以在不同的计算机上使用具有多个 virtualenvs 的单个 Pyramid 项目?

python - Python 中的 SOAP 后端

python - Pandas:根据分组总和结果与另一列中的值的比较来修改每组中最后一个单元格的值

python - 合并 pandas 中超过 50% 匹配的两个 df 列表字符串列表

python - 根据匹配前两个字符查找两列之间的分钟差异

python - 读取大量parquet文件: read_parquet vs from_delayed

python - 如何从 Dataframe 中删除重复的列和最后 5 行

python - 根据查找 df 矩阵从一个 df 获取行

r - 计算以零为底的累积总和 (cumsum)