Pandas MultiIndex列调用rename方法重命名不生效问题
问题原因
pandas.DataFrame.rename() 针对MultiIndex结构列做重命名时,仅支持替换索引各层级内的标签值,不会自动将多级索引打平为单级索引。构造的映射字典键值虽然完全匹配原列元组,但rename方法不会改变列的索引层级结构,因此执行后列仍保持原有两级MultiIndex形态,重命名未实际生效。
正确实现方案
直接遍历MultiIndex列的元组,按规则拼接成目标字符串后赋值给columns属性,即可一步完成列打平+重命名,代码如下:
import requests import pandas as pd url = 'https://en.wikipedia.org/wiki/List_of_countries_by_length_of_coastline' html = requests.get(url).content df_list = pd.read_html(html) coast_df1 = df_list[-2] # 拼接两级列名后直接赋值,替换原有MultiIndex coast_df1.columns = [f"{a}-{b}" for a, b in coast_df1.columns] print(coast_df1.columns)
执行后得到的列为单级字符串索引,完全符合预期:
Index(['Country-Country', 'The World Factbook[2]-Rank', 'The World Factbook[2]-km', 'World Resources Institute[1]-Rank', 'World Resources Institute[1]-km', 'Land area km2 (TWF)[3]-Land area km2 (TWF)[3]', 'Coast/area ratio (m/km2)-(TWF)', 'Coast/area ratio (m/km2)-(WRI)', 'Coast/area0.5 ratio-(TWF)'], dtype='object')
注意事项
- 涉及MultiIndex转单级索引的场景,直接给
df.columns赋值新标签列表是效率最高、兼容性最好的写法,无需绕路使用rename - rename方法的设计定位是修改现有索引层级内的标签值,不支持修改索引的层级结构,不要用它实现超出设计定位的逻辑
内容的提问来源于stack exchange,提问作者DDK81
相关产品推荐
相关产品推荐

