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

如何将PDF中跨行地址合并为单行并转换为Pandas DataFrame?

解决PDF转Pandas DataFrame后Address列拆分的问题

当用tabula读取PDF表格时,Address列内容常被拆分为后续的NaN行,可通过以下步骤合并到对应主行:

方法一:数据后处理合并(通用方案)

如果读取后已经出现拆分,直接对DataFrame做聚合处理:

  1. 导入依赖并读取数据
import pandas as pd
import tabula

# 读取PDF表格
df = tabula.read_pdf(filename, pages=pages)[0]
  1. 标记分组并聚合
    利用Pos列的非空值作为分组标识,将同一条记录的拆分行归为一组,再合并Address内容:
# 用Pos列的非空值填充分组ID,确保拆分行属于同一主记录
df['group_id'] = df['Pos'].ffill()

# 按分组聚合:Address拼接所有非空片段,其他列取主行的非空值
cleaned_df = df.groupby('group_id').agg(
    Pos=('Pos', 'first'),
    Name=('Name', 'first'),
    Surname=('Surname', 'first'),
    DateOfBirth=('DateOfBirth', 'first'),
    Address=('Address', lambda x: ' '.join(x.dropna().str.strip()))
).reset_index(drop=True)
  1. 清理Address格式(可选)
    如果Address片段中有多余的连字符或空格,可进一步处理:
# 移除换行导致的连字符后多余空格
cleaned_df['Address'] = cleaned_df['Address'].str.replace('-\s+', '-', regex=True)

方法二:调整tabula读取参数(从源头避免拆分)

尝试调整tabula的读取模式,让PDF表格识别更准确,减少拆分:

# 尝试lattice模式(适合带网格线的表格)
df = tabula.read_pdf(filename, pages=pages, lattice=True)[0]

# 或尝试stream模式(适合没有网格线的表格)
df = tabula.read_pdf(filename, pages=pages, stream=True)[0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:07:23