python - 熊猫不会重命名多索引列名
问题描述
我刚刚花了几个小时试图让它工作,我开始认为我想要不可能的事情,尽管我很确定它可以完成。我有一个熊猫数据框,它有一个多索引标题(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 是 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)
推荐阅读
- scala - dataproc 重命名 GCS 文件夹中 spark 写入的文件
- node.js - 如何在 GCP 等平台上使用 node-argon2?
- ruby-on-rails - docker-compose 在包中找不到 gemfile
- sqlalchemy - 为什么 user.id 即使在提交删除后仍保留价值?
- sql - 用聚合分组以在 SQL Server 中获取记录?
- java - 使用 Jersey 发送 ByteArrayOutputStream
- html - 为什么内联包装如此奇怪?解释 css 内联行为
- elasticsearch - 如何使用查询 dsl 或 java api 突出显示 Elasticsearch 中的嵌套字段?
- laravel - 在laravel中删除一行后未获取数据
- python - 请求:.json() 由于 JSON 格式而出错