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

如何处理pandas read_html读取网页表格时的多余表头层级?

处理pandas read_html读取网页表格的多余表头层级

问题场景

用pandas.read_html读取格鲁吉亚统计局网页的表格后,结果出现了多余的表头层级——首行的NaN对应年份的上层表头,导致数据结构不符合分析需求。原始代码和输出如下:

原始代码

import pandas as pd
data = pd.DataFrame(pd.read_html("https://www.geostat.ge/ka/modules/categories/26/samomkhmareblo-fasebis-indeksi-inflatsia", encoding='utf-8')[0])
print(data)

原始输出

0       1   ...      11      12
0                                        NaN  2012.0  ...  2022.0  2023.0
1  საშუალო წლიური წინა წლის საშუალო წლიურთან    99.1  ...   111.9   102.5
2            დეკემბერი წინა წლის დეკემბერთან    98.6  ...   109.8   100.4

解决方法

直接通过两步清理即可得到规范的数据结构:

方法一:分步处理

  1. 提取年份作为列名
    把输出中第0行的年份值设为列标题,同时将第一列的NaN替换为明确的名称(比如“指标类型”):

    # 获取第0行的内容作为列名,替换第一列的NaN
    new_columns = data.iloc[0].tolist()
    new_columns[0] = "指标类型"
    data.columns = new_columns
    
  2. 删除多余的表头行并重置索引
    已经用第0行作为列名,直接删除该行后重置索引:

    data = data.drop(0).reset_index(drop=True)
    

方法二:简洁版代码

把两步合并成一段代码,更高效:

import pandas as pd

# 读取网页表格
tables = pd.read_html("https://www.geostat.ge/ka/modules/categories/26/samomkhmareblo-fasebis-indeksi-inflatsia", encoding='utf-8')
data = tables[0]

# 替换列名并清理行
new_cols = data.iloc[0].tolist()
new_cols[0] = "指标类型"
data = data.rename(columns=dict(zip(data.columns, new_cols))).drop(0).reset_index(drop=True)

# 查看处理后的数据
print(data)

处理后效果

清理后的数据会以“指标类型”为第一列,年份作为其他列的标题,没有多余的表头层级,直接可以用于后续的经济数据分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:25:22