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

pd.read_html解析嵌套表格异常:表头混乱内容压缩至首单元格求助

问题解答

是否为预期行为?

是预期行为。pd.read_html的核心设计是处理结构规整的扁平表格,它默认会将嵌套表格视为外层单元格的内嵌内容,不会自动识别并展开嵌套结构;同时外层表格仅包含1个表头单元格,但内层表格有2列,列数不匹配进一步导致了解析后的结构混乱。

解决方案

1. 手动提取嵌套表格(推荐)

先通过BeautifulSoup定位到内层嵌套表格,再单独解析这个表格:

import pandas as pd
from bs4 import BeautifulSoup

# 目标HTML内容
html_content = """
<table>    
    <tbody>
        <tr>
            <th>
                <div>
                    <span>Header</span>
                </div>
            </th>
        </tr>
        <tr>
            <td>
                <table>
                    <tbody>
                        <tr>
                            <td>Qu2</td>
                            <td>23-09-13</td>                        
                        </tr>
                        <tr>                                                 
                            <td>Br</td>
                            <td>R72</td>
                    </tbody>
                </table>
            </td>
        </tr>
    </tbody>
</table>
"""

# 解析HTML定位嵌套表格
soup = BeautifulSoup(html_content, "html.parser")
# 定位外层表格中的内层表格
inner_table = soup.select_one("table table")

# 解析内层表格为DataFrame
result_df = pd.read_html(str(inner_table))[0]
# 可按需添加外层表头相关标识
result_df.columns = [f"Header_{col}" for col in result_df.columns]

print(result_df)

2. 预处理HTML结构

如果需要保留外层表头与内层表格的关联,可以修改HTML结构,让外层表头和内层表格的列对齐,再用pd.read_html解析:比如将外层表头复制为内层表格的列名,或调整外层表格的单元格数量与内层匹配后再解析。

3. 自定义解析逻辑

针对复杂嵌套场景,可直接用BeautifulSoup遍历单元格,手动构建DataFrame,完全控制解析流程:

import pandas as pd
from bs4 import BeautifulSoup

soup = BeautifulSoup(html_content, "html.parser")
rows = []
# 遍历内层表格的所有行
for tr in soup.select("table table tr"):
    row = [td.get_text(strip=True) for td in tr.find_all("td")]
    rows.append(row)

# 构建DataFrame并关联外层表头
custom_df = pd.DataFrame(rows, columns=["Item", "Value"])
custom_df["Category"] = soup.select_one("th span").get_text(strip=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:58:34