如何遍历Pandas DataFrame拆分HTML表格的合并单元格并保留结构?
解决UFC Stats表格合并单元格拆分问题
问题原因
你之前的re.split无效,大概率是因为网页中的分隔空白不是普通空格,而是非断空格(Unicode编码\u00A0,对应HTML的 ),常规的\s{2,}可能无法匹配到这类空白字符;另外没有对非字符串类型的单元格做判断,也可能导致隐性问题。
解决方案
直接使用pandas的applymap方法遍历整个DataFrame的每个单元格,针对字符串类型的内容做拆分处理,既保留原有DataFrame的行列结构,又能正确拆分合并的单元格内容:
import re import pandas as pd # 读取网页表格 tables = pd.read_html('http://www.ufcstats.com/fight-details/451525a1abe30a91') df = tables[0] # 定义单元格拆分函数 def split_merged_cell(cell): # 仅处理字符串类型的单元格,避免数值等类型报错 if isinstance(cell, str): # 先把网页常见的非断空格替换为普通空格,再用2个及以上空格拆分 normalized_str = cell.replace('\u00A0', ' ').strip() # 拆分后过滤空字符串(避免连续多空格导致的空元素) parts = [p for p in re.split(r'\s{2,}', normalized_str) if p] # 如果拆分出多个内容就返回列表,否则返回原内容 return parts if len(parts) > 1 else normalized_str # 非字符串类型直接返回原内容 return cell # 应用拆分函数到整个DataFrame processed_df = df.applymap(split_merged_cell) # 验证效果,比如查看第一个单元格 print(processed_df.iloc[0, 0])
说明
- 该方法会遍历DataFrame的每一个单元格,仅对字符串类型的内容做处理,不会改变原有行列结构
- 先替换非断空格为普通空格,确保能匹配到网页中常见的分隔符
- 拆分后过滤空元素,避免连续多空格导致的无效结果
- 如果单元格内容不需要拆分(没有双空格分隔),会保留原内容的格式
内容的提问来源于stack exchange,提问作者SS1
相关产品推荐
相关产品推荐

