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

使用tabula、tabulate导出PDF表格出现多列合并异常问题咨询

解决tabula读取PDF表格列合并问题的方案

出现前三列被识别为同一列的核心原因是tabula默认自动列检测逻辑误判了列边界,可通过以下方法解决:

方案1:手动指定列边界(准确率最高)

手动传入每列左侧的x轴坐标(单位为磅,从PDF页面左边缘开始计算),关闭自动列检测即可:

import tabula
# 替换为实际测量的5列对应的左侧x坐标
custom_columns = [45, 110, 190, 270, 350]
df_list = tabula.read_pdf(
    "你的PDF文件路径.pdf",
    pages="1", # 替换为表格所在的页码,all代表所有页
    columns=custom_columns,
    guess=False, # 关闭自动列检测,强制使用自定义边界
    lattice=True # 有边框表格加该参数,无边框表格替换为stream=True
)
target_df = df_list[0]

坐标可以通过PDF阅读器开启坐标显示功能查看,也可以先运行一次不带columns参数的代码,输出默认识别的列坐标后再微调。

方案2:读取后拆分合并列

如果不想调整读取参数,可以对已读取到的合并列直接拆分:

import pandas as pd
# 假设合并的前三列存储在df的第一列中,按空格拆分2次得到3个新列
target_df[["第一列", "第二列", "第三列"]] = target_df.iloc[:,0].str.split(
    expand=True, 
    n=2 # 最多拆分2次,避免内容本身带空格导致拆分错误
)
# 删除原始合并列
target_df = target_df.drop(target_df.columns[0], axis=1)

额外注意事项

  • 如果是扫描版PDF,需要先通过OCR工具转换为可检索PDF后再用tabula读取
  • 如果表格周围有其他无关内容,可以添加area=[top, left, bottom, right]参数指定表格所在的页面区域,减少干扰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:24:03