如何处理Pandas读取HTML表格后的重复列与字段拆分?
解决HTML表格提取后的格式问题
问题分析
使用pd.read_html("synced_contacts.html")提取表格后,dfs[1]存在两个核心问题:
- 数据在两列重复
- 字段名与值合并(如
First NameDaniela),未拆分
解决步骤
1. 移除重复列
先提取dfs[1]中的有效单列(假设重复列是前两列,取第一列即可,可根据实际列索引调整):
# 提取第一列作为原始数据列 df = dfs[1].iloc[:, 0].to_frame(name='raw_data')
2. 拆分字段名与值
针对First NameDaniela这类字符串,用正则匹配字段名(带空格的英文标识)和值(大写开头的内容)的分界点,完成拆分:
import re # 正则规则:匹配字段名部分和值部分 pattern = r'([A-Za-z\s]+)([A-Z][a-z]+)' # 拆分并生成字段、值两列 df[['Field', 'Value']] = df['raw_data'].str.extract(pattern) # 清理字段名的多余空格 df['Field'] = df['Field'].str.strip()
3. 转换为目标格式
如果需要将字段作为列名、对应值作为行数据,可通过重塑表格实现:
# 转换为宽表格式 final_df = df.set_index('Field')['Value'].unstack().reset_index()
完整代码示例
import pandas as pd import re # 读取HTML表格 dfs = pd.read_html("synced_contacts.html") # 提取有效列 df = dfs[1].iloc[:, 0].to_frame(name='raw_data') # 拆分字段与值 pattern = r'([A-Za-z\s]+)([A-Z][a-z]+)' df[['Field', 'Value']] = df['raw_data'].str.extract(pattern) df['Field'] = df['Field'].str.strip() # 生成目标格式表格 final_df = df.set_index('Field')['Value'].unstack().reset_index() print(final_df)
适配调整说明
- 如果值包含数字、小写开头等情况,可将正则调整为
r'([A-Za-z\s]+)(.+)'以适配更多格式 - 若重复列的位置不是第一列,修改
iloc[:, 0]中的索引值即可
内容的提问来源于stack exchange,提问作者schradernm
相关产品推荐
相关产品推荐

