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

pd.read_html返回三维数据无法转为2D DataFrame的解决方法

问题根因

pandas.read_html()的设计逻辑是返回当前页面源码内所有可识别HTML表格的列表集合,不会直接返回单个DataFrame。你拿到的1×137×29维度,对应的就是「列表长度为1,列表内唯一项是137行29列的DataFrame」,直接对存储了所有表格的列表对象执行转DataFrame操作,自然会触发非二维结构的报错。

修复方案

直接提取列表内对应的目标表格即可,不需要额外做维度转换,修正后的可运行代码如下:

from selenium import webdriver
import time
import pandas as pd


PATH = "C:\Program Files (x86)\Chrome\chromedriver_win32\chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.maximize_window()

# 注意:driver.get()无返回值,不需要赋值给变量
driver.get("https://www.europeantour.com/dpworld-tour/abu-dhabi-hsbc-championship-2021/leaderboard?holebyhole=true&round=1")
time.sleep(3)

# 接收所有识别到的表格列表
table_list = pd.read_html(driver.page_source)
# 提取第一个表格,就是需要的赛事排行榜DataFrame,为标准二维结构
leaderboard_df = table_list[0]

# 后续可直接对leaderboard_df做数据编辑操作
# 验证维度:会输出(137, 29)
print(leaderboard_df.shape)

driver.quit()
补充说明
  • 如果后续爬取其他页面遇到同类型报错,可以先执行print(len(table_list))查看页面识别到的表格总数,逐个打印表格前几行匹配目标内容,替换索引值即可拿到需要的DataFrame。
  • 原代码中page = driver.get(...)属于无效写法,driver.get()仅执行页面跳转动作,不会返回任何内容,页面源码直接通过driver.page_source属性获取即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:45:24