如何拆分pandas read_html返回的多级索引DataFrame提取NFL赛事数据
解决方案
通过调整pd.read_html的传入参数,再搭配简单的列名处理即可去掉多级索引,无需自行解析表格文本:
调整后的代码
import undetected_chromedriver.v2 as uc from selenium.webdriver.common.by import By import pandas as pd driver = uc.Chrome() driver.get("https://www.oddsportal.com/american-football/usa/nfl/") table = driver.find_element(By.XPATH, '//*[@id="tournamentTable"]').get_attribute('outerHTML') # 调整读取参数,避免生成多级索引结构 df = pd.read_html( table, header=0, # 明确指定表格第一行作为表头,避免pandas自动识别多行为表头 index_col=False, # 禁止将首列识别为行索引 flavor='bs4' )[0] # 若仍存在多级列名,一键转为单层结构 if isinstance(df.columns, pd.MultiIndex): # 这里直接取多级列的最后一级作为列名,也可以根据需要调整为拼接所有层级内容 df.columns = [col[-1].strip() for col in df.columns]
参数说明
header=0:强制以表格第一行作为表头基准,是避免生成多级列索引最核心的参数index_col=False:关闭pandas自动识别行索引的逻辑,避免生成多级行索引flavor='bs4':指定用BeautifulSoup作为解析器,对这类不规则网页表格的兼容性更好
处理完成后即可得到单层结构的DataFrame,你可以直接在此基础上做列重命名、队伍字段拆分、日期填充等后续处理即可。
内容的提问来源于stack exchange,提问作者Redratz
相关产品推荐
相关产品推荐

