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

如何为pandas DataFrame添加中间列,值取自表格外部的dt标签内容

你可以通过Selenium先提取<dt>标签内的统计项名称,再给对应DataFrame新增列即可,修改后的代码如下:
首先保留你原有代码直到点击统计标签、等待5秒的部分,替换后续的表格读取逻辑即可:

# 原有代码到这部分为止
elem = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((
            By.XPATH, "//ul[@class='fig-tabs__list']//a[@id='tab_statistics']")))
driver.execute_script("arguments[0].click();", elem)
sleep(5)

# ----------------- 新增/修改部分开始 -----------------
# 方案1:匹配你原有选择的表格索引,适配现有逻辑
# 提取所有dt标签的统计项名称
stat_names = [dt.text.strip() for dt in driver.find_elements(By.XPATH, "//div[contains(@id,'match-teamstats')]//dl/dt")]
# 读取页面所有表格
all_dfs = pd.read_html(driver.page_source)
# 你之前选择的表格索引顺序
selected_df_indexes = [5,4,1,2,7,12,16,17,22]
processed_dfs = []
for idx, df_idx in enumerate(selected_df_indexes):
    tmp_df = all_dfs[df_idx].copy()
    # 给当前表格新增Stats列,赋值对应统计项名称
    tmp_df['Stats'] = stat_names[idx]
    processed_dfs.append(tmp_df)
# 合并所有表,调整列顺序把Stats放到两队中间
stats = pd.concat(processed_dfs, ignore_index=True)
stats = stats.reindex(columns=['Borussia Dortmund', 'Stats', 'Borussia Mönchengladbach'])
print(stats)

如果担心页面表格索引变动导致匹配错误,可以用更稳妥的方案,直接遍历每个统计块提取对应数据:

# 方案2:直接逐个取统计项和对应表格,不受全局表格索引变动影响
processed_dfs = []
# 定位所有统计块dl元素,每个dl对应一个统计项+表格
dl_elements = driver.find_elements(By.XPATH, "//div[contains(@id,'match-teamstats')]//dl")
for dl in dl_elements:
    # 提取统计项名称
    stat_name = dl.find_element(By.TAG_NAME, 'dt').text.strip()
    # 提取当前块下的表格HTML
    table_html = dl.find_element(By.TAG_NAME, 'table').get_attribute('outerHTML')
    # 读取表格为DataFrame
    tmp_df = pd.read_html(table_html)[0]
    tmp_df['Stats'] = stat_name
    processed_dfs.append(tmp_df)
# 合并调整列顺序
stats = pd.concat(processed_dfs, ignore_index=True)
stats = stats.reindex(columns=['Borussia Dortmund', 'Stats', 'Borussia Mönchengladbach'])
print(stats)

两种方案运行后都可以得到你需要的带中间统计项列的DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:54:09