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

使用pandas read_html读取英空气质量数据遇解析错误及转DataFrame问题

解决pandas read_html解析英国空气质量数据的错误

核心问题原因

网页中的表格存在非标准结构(比如合并单元格、列数不一致的行),导致默认解析器无法正确识别,触发ParserError;而read_html返回列表是因为页面可能包含多个表格元素,需要手动选取目标表格。

具体解决步骤

  • 指定更健壮的解析器:使用lxml解析器替代默认的html.parser,它对不规范HTML表格的兼容性更好。
  • 跳过错误行:通过on_bad_lines参数(pandas 1.4+版本)跳过解析失败的行,旧版本可使用error_bad_lines=False。
  • 精准匹配目标表格:用match参数匹配表格内的关键词(比如"Date"或"DAQI"),直接定位需要的表格。
  • 从列表中提取DataFrame:read_html返回的列表中,选取对应索引的元素转为DataFrame。

代码示例

import pandas as pd

# 目标网页链接
url = "https://uk-air.defra.gov.uk/data/DAQI-regional-data?regionIds%5B%5D=999&aggRegionId%5B%5D=999&datePreset=6&startDay=01&startMonth=01&startYear=2022&endDay=01&endMonth=01&endYear=2023&queryId=&action=step2&go=Next+"

# 方案1:指定解析器并自动跳过错误行
dfs = pd.read_html(url, flavor="lxml", on_bad_lines="skip")
# 查看找到的表格数量,确认目标表格索引
print(f"页面共找到 {len(dfs)} 个表格")
# 假设第一个表格是目标数据,转为DataFrame
target_df = dfs[0]

# 方案2:匹配包含特定关键词的表格(比如"Date"列)
dfs = pd.read_html(url, flavor="lxml", match="Date")
if dfs:
    target_df = dfs[0]

# 可选:检查数据结构
print(target_df.info())

额外提示

如果跳过错误行后仍有数据异常,可以用skiprows参数手动跳过指定行(比如报错提示的第7行,对应索引为6,用skiprows=range(6)跳过前6行);如果表格有多层表头,可使用header参数指定表头行号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 11:17:17