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

Python3.7中pd.read_html爬取网站表格出现形状描述,如何消除?

问题分析与解决方案:pd.read_html处理复杂表头表格异常

你在Python 3.7里循环用pd.read_html爬取网站表格时碰到的问题,根源在于目标表格的多层合并表头结构和你错误的skiprows参数设置。

问题出在哪?

看你提供的目标HTML,这个表格有3行表头(前3行都是表头,包含colspan/rowspan合并单元格),但你用了skiprows=[0,1,2]——这等于把所有表头行都跳过了,剩下的唯一数据行被pandas当成了无表头的内容。加上原表头的合并单元格被解析成了多个空列,就导致了那种奇怪的[1 rows x 14 columns]结构,甚至访问df_list[0]也没法正常使用。

而你测试的简单HTML只有一行有效表头,skiprows=[1]跳过的是空行,pandas能正确识别剩下的表头,所以结果正常。

解决步骤

1. 正确识别多层表头

不要跳过表头行,而是告诉pandas前3行都是表头,让它自动处理合并单元格:

df_list = pd.read_html(html_source, header=[0,1,2])

这样pandas会生成多级列名,对应原表格的表头层级。

2. 清理无效空列

解析后可能会出现全空的列(因为原表头的合并单元格导致),可以删除这些列:

df = df_list[0].dropna(axis=1, how='all')

3. 简化列名(可选)

如果多级表头对你的后续处理不方便,可以把它们合并成单一列名,比如用下划线连接:

df.columns = ['_'.join(str(c) for c in col).strip() for col in df.columns.values]

效果验证

用上面的代码处理你的目标HTML后,得到的DataFrame会正确对应原表格的结构:

  • 列名会匹配原表头的分类(比如Teilarbeit、Arbeitszeit-bedarf、Maschinenkosten_Abschreibung等)
  • 数据行2.000 l, Aufbaupflanzenschutzspritze; 138 kW等会准确对应到对应的列下

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:17:43