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
相关产品推荐
相关产品推荐

