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

使用Pandas筛选网页表格中值属于指定数组的DataFrame

解决Pandas筛选HTML表格DataFrame的问题

问题根源

你遇到的核心问题是网页表格的表头结构和Pandas默认解析逻辑不匹配:网页里<thead>的行是占位用的0、1、2、3,实际表头(Date、Name等)在<tbody>的第一行。直接用read_html解析后,DataFrame的列名是数字,而非你期望的Number这类名称,导致df.Number无法定位到目标列。

修正步骤与代码

1. 处理单个表格的筛选

先正确解析表格结构,再筛选目标行:

import pandas as pd

url = 'https://some_website.com'
# 获取网页中所有表格的DataFrame列表
dfs = pd.read_html(url)
# 取出第一个目标表格
df = dfs[0]

# 重置列名为实际表头(tbody第一行的内容)
df.columns = df.iloc[0]
# 跳过原表头行,保留真实数据
df = df[1:]
# 重置索引避免混乱
df = df.reset_index(drop=True)

# 指定要匹配的数值数组
arr_Nr = ['3290', '9273']
# 筛选Number列包含目标值的行
filtered_df = df[df['Number'].isin(arr_Nr)]
print(filtered_df)

2. 筛选整个DataFrame列表中符合条件的表格

如果网页有多个表格,需要遍历检查每个表格是否存在目标值:

def get_matching_dfs(df_list, target_values):
    matching_dfs = []
    for df in df_list:
        # 复制并处理当前表格的表头
        temp_df = df.copy()
        temp_df.columns = temp_df.iloc[0]
        temp_df = temp_df[1:].reset_index(drop=True)
        # 检查表格中是否有单元格属于目标数组
        if temp_df.isin(target_values).any().any():
            matching_dfs.append(temp_df)
    return matching_dfs

# 获取所有符合条件的DataFrame
matching_dfs = get_matching_dfs(dfs, arr_Nr)
for idx, match_df in enumerate(matching_dfs):
    print(f"--- 符合条件的表格 {idx+1} ---")
    print(match_df)

关键说明

  • 用df.iloc[0]提取真实表头,重新赋值给df.columns,才能通过列名(如Number)定位数据列。
  • 使用isin()方法替代单个值判断,更适合多值数组的筛选场景。
  • 处理表头后必须跳过原表头行(df[1:]),避免表头内容混入数据影响筛选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:30:42