You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DataFrame无to_flat_index属性报错:多索引HTML表格处理问题

问题:DataFrame调用to_flat_index()触发AttributeError

我正在导入一个格式怪异且带有MultiIndex的HTML文件,目标是提取大表格中从第10行开始的'Photovoltaic'表格。通过代码确认该行的索引为MultiIndex结构,但调用to_flat_index()方法时出现报错:AttributeError: 'DataFrame' object has no attribute 'to_flat_index'

代码及执行输出

提取表格并查看指定行

net_met_cus = 'https://www.eia.gov/electricity/annual/html/epa_04_10.html'

net_met = pd.read_html(net_met_cus)
print(len(net_met))
net_met_pv = net_met[1]
# Photovoltaic表格从第12行开始
print(net_met_pv.loc[12])

输出:

Unnamed: 0_level_0  Year              Photovoltaic
Capacity (MW)       Residential       Photovoltaic
                    Commercial        Photovoltaic
                    Industrial        Photovoltaic
                    Transportation    Photovoltaic
                    Total             Photovoltaic
Customers           Residential       Photovoltaic
                    Commercial        Photovoltaic
                    Industrial        Photovoltaic
                    Transportation    Photovoltaic
                    Total             Photovoltaic
Name: 12, dtype: object

验证索引类型

# 确认是否为MultiIndex
print(net_met_pv.loc[12].index)

输出:

MultiIndex([('Unnamed: 0_level_0',           'Year'),
            (     'Capacity (MW)',    'Residential'),
            (     'Capacity (MW)',     'Commercial'),
            (     'Capacity (MW)',     'Industrial'),
            (     'Capacity (MW)', 'Transportation'),
            (     'Capacity (MW)',          'Total'),
            (         'Customers',    'Residential'),
            (         'Customers',     'Commercial'),
            (         'Customers',     'Industrial'),
            (         'Customers', 'Transportation'),
            (         'Customers',          'Total')],
           )

触发报错的代码

# 尝试扁平化索引
net_met_pv.to_flat_index()

报错输出:

AttributeError: 'DataFrame' object has no attribute 'to_flat_index'

解决方案

to_flat_index()是MultiIndex对象专属方法,不能直接对DataFrame实例调用。你需要针对DataFrame的列索引(或行索引)来调用该方法:

  1. 扁平化列索引:
# 将DataFrame的列MultiIndex转为扁平化的元组索引
net_met_pv.columns = net_met_pv.columns.to_flat_index()
  1. 可选:将元组形式的列名转为可读性更强的字符串(比如用下划线连接):
# 把扁平化后的元组列名转为字符串
net_met_pv.columns = ['_'.join(col) for col in net_met_pv.columns]

从你的输出可以看出,net_met_pv的列本身就是MultiIndex结构,所以直接操作columns即可实现需求。

内容的提问来源于stack exchange,提问作者Mainland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:06:38