使用Pandas爬取UFC赛事表格时缺失关键列的问题求助
问题分析与解决方法
原因
- 你选中的
tables[2]并非赛事结果表格,而是页面里的奖金统计类表格,自然没有对手、终结方式、比赛回合这些核心列。 - 就算选对了结果表格,维基赛事表用了HTML合并单元格(rowspan/colspan),默认爬取会生成多级表头,容易让你误以为关键列缺失。
解决步骤
1. 定位正确的表格索引
先遍历所有爬取到的表格,通过表头找到目标结果表:
import pandas as pd url = 'https://en.wikipedia.org/wiki/UFC_168' tables = pd.read_html(url) # 逐个打印表格列名,找到包含选手、对手等信息的表格 for idx, table in enumerate(tables): print(f"表格{idx}的列:{list(table.columns)}")
运行后会发现,UFC168的主赛结果表格是tables[3],副赛结果表格是tables[4]。
2. 扁平化多级表头
维基的结果表格多为多级表头,直接读取会出现列名混乱,需要合并表头:
# 获取主赛结果表格 main_card = tables[3] # 把多级表头合并为单个清晰的列名 main_card.columns = [' '.join(col).strip() for col in main_card.columns.values] # 查看完整数据,对手、终结方式、回合列都会显示出来 print(main_card)
3. 清理无效数据
如果表格里有合并单元格生成的空行/空值,用Pandas简单清理即可:
# 删除全空的行 cleaned_table = main_card.dropna(how='all') # 重置索引 cleaned_table = cleaned_table.reset_index(drop=True)
内容的提问来源于stack exchange,提问作者Kanta
相关产品推荐
相关产品推荐

