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

如何用pd.read_html读取含重复表头与单列行的HTML表格?

解决Unicode表情表格读取的表头与行过滤问题

我来帮你搞定这个Unicode表情表格的读取问题!这个表格的结构确实有点棘手——合并单元格的表头、隔段重复的表头行,还有零散的单列行,咱们一步步来解决:

步骤1:完整读取表格,避免自动表头识别偏差

首先别着急用skiprows,因为pd.read_html对合并单元格的表头识别经常出问题,我们先把整个表格完整读进来:

import pandas as pd

# 读取网页中的所有表格,这里取第一个表格
dfs = pd.read_html('http://unicode.org/emoji/charts/full-emoji-list.html', encoding='utf-8')
df = dfs[0]

步骤2:手动设置正确的表头

观察原表格结构,真实的有效表头其实是第3行(Python索引为2的行),前两行是页面标题类的内容。我们把这一行设为列名,然后从第4行开始加载数据:

# 将第3行(索引2)设为列名
df.columns = df.iloc[2]
# 截取从第4行(索引3)开始的有效数据,并重置索引
df = df.iloc[3:].reset_index(drop=True)

步骤3:过滤重复的表头行

表格中每隔若干行就会重复出现表头行,这些行的所有内容和我们设置的列名完全一致,我们可以通过这个特征过滤掉它们:

# 筛选出所有内容不等于表头的行(~表示取反)
df = df[~df.eq(df.columns).all(axis=1)]

步骤4:过滤仅含单列的无效行

表格里存在一些只有单列内容的分隔/注释行,我们可以通过保留非空值足够多的行来过滤它们(这里设置阈值为5,可根据实际列数调整):

# 保留至少有5个非空值的行,并重置索引
df = df.dropna(thresh=5).reset_index(drop=True)

完整代码示例

把以上步骤整合起来,还可以给列名设置更清晰的别名(可选):

import pandas as pd

# 读取表格
dfs = pd.read_html('http://unicode.org/emoji/charts/full-emoji-list.html', encoding='utf-8')
df = dfs[0]

# 设置正确表头并截取数据
df.columns = df.iloc[2]
df = df.iloc[3:].reset_index(drop=True)

# 过滤重复表头行
df = df[~df.eq(df.columns).all(axis=1)]

# 过滤无效单行
df = df.dropna(thresh=5).reset_index(drop=True)

# 可选:给列名设置更直观的别名
df.columns = [
    'Code', 'Sample_Emoji', 'Emoji_Name', 
    'Unicode_1', 'Unicode_2', 'Unicode_3', 'Unicode_4',
    'Category', 'Subcategory', 'Added_Version'
]

# 查看处理后的结果
print(df.head())

这样处理后,你就能得到结构清晰、没有重复表头和无效行的表情数据啦!

内容的提问来源于stack exchange,提问作者Tlaloc-ES

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 14:37:27