如何处理pandas read_html生成DataFrame的多余表头及无效行?
解决Fangraphs表格抓取后多余表头和无效行问题
问题分析
你抓取的表格存在两处无效内容:
- 顶部第0行是分页信息(
1 Page size: select 14 items in 1 pages),不属于数据表头 - 底部最后一行是重复的分页控件行,无有效数据
解决方案
通过以下步骤清理数据:
- 将表格的第1行(原数据里的真实表头)设置为DataFrame的列名
- 截取从第2行开始到倒数第2行的有效数据(跳过顶部无效行和底部无效行)
- 重置索引,确保数据结构规整
完整代码
from pandas import read_html, set_option # 目标URL url = "https://www.fangraphs.com/leaders.aspx?pos=all&stats=bat&lg=all&qual=0&type=8&season=2022&month=1000&season1=2022&ind=0&team=0,ts&rost=0&age=0&filter=&players=0&startdate=2022-04-07&enddate=2022-04-07&page=1_50" # 抓取表格 table_of_interest = read_html(url)[-2] # 设置真实表头:将第1行作为列名 df = table_of_interest.copy() df.columns = df.iloc[1] # 截取有效数据:跳过前2行(第0行是分页信息,第1行是表头),去掉最后一行无效行 df = df.iloc[2:-1] # 重置索引 df = df.reset_index(drop=True) # 查看清理后的数据 print(df)
代码说明
df.columns = df.iloc[1]:把原表格中第1行的内容替换成DataFrame的列名,覆盖掉默认的索引列名df.iloc[2:-1]:2:表示从第2行开始取数据(跳过前两行无效内容),:-1表示不取最后一行的无效分页行reset_index(drop=True):重置索引,避免原索引混乱
内容的提问来源于stack exchange,提问作者wildcat89
相关产品推荐
相关产品推荐

