如何处理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
解决方法
直接通过两步清理即可得到规范的数据结构:
方法一:分步处理
提取年份作为列名
把输出中第0行的年份值设为列标题,同时将第一列的NaN替换为明确的名称(比如“指标类型”):# 获取第0行的内容作为列名,替换第一列的NaN new_columns = data.iloc[0].tolist() new_columns[0] = "指标类型" data.columns = new_columns删除多余的表头行并重置索引
已经用第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
相关产品推荐
相关产品推荐

