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

使用pd.read_html读取交换机HTML表格返回空DataFrame且无法访问元素的问题

使用pd.read_html读取交换机HTML表格返回空DataFrame且无法访问元素的问题

嘿,我看了你的问题和提供的HTML代码,发现问题出在HTML表格的标签使用上,这才导致pandas识别出了一个空的DataFrame。

问题根源

你的交换机生成的HTML表格里,所有单元格(包括数据行的内容)都用了<th>标签,而不是规范的:表头行用<th>,数据行用<td>。pandas的pd.read_html()默认会把<th>解析为表头层级,而不是数据单元格。这样一来,pandas会把表格里的每一行都当成表头的一部分,最后就没有真正的数据行,自然显示Empty DataFrame,索引也为空。

你看输出里的Columns是一堆元组,就是因为pandas把每一行的<th>都叠成了多层表头,但完全没有数据行可以对应。另外,pd.read_html()返回的是DataFrame列表(因为HTML里可能有多个表格),你之前直接把列表赋值给dataframe,操作的是列表而非单个DataFrame,这也是你无法正常访问元素的原因之一。

解决方法

这里有两个可行的方案,你可以根据情况选择:

方案1:预处理HTML,修正标签(推荐)

如果能修改HTML文件,直接把数据行里的<th>全部替换成<td>就行。比如把:

<tr><th>1/1</th><th>1</th><th>66967821</th>...

改成:

<tr><td>1/1</td><td>1</td><td>66967821</td>...

改完后再用你的原代码读取,pandas就能正常识别表头和数据了。

方案2:用代码预处理HTML(无需手动修改文件)

如果没法直接改HTML文件,我们可以用BeautifulSoup先把数据行的<th>替换成<td>,再传给pandas读取。代码如下:

from bs4 import BeautifulSoup
import pandas as pd

# 读取本地HTML文件
file_path = 'C:\\WebFiles\\switch_stats.html'
with open(file_path, 'r') as f:
    html_content = f.read()

# 解析HTML,修正数据行的标签
soup = BeautifulSoup(html_content, 'html.parser')
table = soup.find('table')

# 只保留第一行作为表头,后续行的<th>全部换成<td>
for row in table.find_all('tr')[1:]:
    for th_tag in row.find_all('th'):
        td_tag = soup.new_tag('td')
        td_tag.string = th_tag.string
        th_tag.replace_with(td_tag)

# 现在读取处理后的HTML
dataframes = pd.read_html(str(soup))
df = dataframes[0]

# 现在就能正常查看和访问DataFrame了
print(df)
# 比如访问"Slot/Port"列的第一个元素
print(df['Slot/Port'].iloc[0])

处理完后,你就能得到结构正常的DataFrame,正常访问里面的所有端口统计数据啦。

备注:内容来源于stack exchange,提问作者DBacker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 19:53:12