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

Python提取那加兰邦选民PDF数据转Excel:正则匹配NaN问题求助

修复PyPDF2提取那加兰邦选民名册时的正则匹配NaN问题

核心原因

PDF提取的选民文本存在排版混乱(条目内换行、分隔符前后空格不一致、字段跨行),原正则未适配这些非标准化格式,导致匹配失败出现NaN。

适配排版的正则方案

针对印度选举委员会PDF的常见格式,使用兼容换行、可变空格的正则:

import re
import pandas as pd
from PyPDF2 import PdfReader

# 匹配选民条目的正则(兼容换行、任意空格)
voter_regex = re.compile(
    r'(\d{4})\s+'  # 选民编号(固定4位)
    r'([^\n/]+?)\s*/\s+'  # 姓名(匹配到第一个/前的内容,忽略前后空格)
    r'([^\n/]+?)\s*/\s+'  # 性别
    r'(\d{1,3})\s*/\s+'  # 年龄
    r'EPIC:\s*([A-Z0-9]+)\s*/\s+'  # EPIC号(忽略EPIC:后的空格)
    r'([\s\S]+?)(?=\n\d{4}|\Z)',  # 住址(匹配到下一个选民编号或文本末尾)
    re.MULTILINE
)

# 读取并处理PDF
reader = PdfReader("nagaland_voter_roll.pdf")
raw_text = "\n".join([page.extract_text() for page in reader.pages])

# 提取所有匹配条目
voter_entries = voter_regex.findall(raw_text)

# 生成Excel
df = pd.DataFrame(
    voter_entries,
    columns=["选民编号", "姓名", "性别", "年龄", "EPIC编号", "住址"]
)
df.to_excel("nagaland_voters_clean.xlsx", index=False)

调试技巧

  1. 打印raw_text的前2000字符,确认实际提取的文本格式是否与正则假设一致
  2. 使用re.finditer(raw_text)遍历匹配结果,查看未匹配的文本块,针对性调整正则分组
  3. 若存在姓名带特殊字符、住址跨行的极端情况,可添加预处理步骤合并跨行字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:52:17