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

Tabula Python包提取PDF中单行表格返回空列表的解决方案问询

解决方案

方案1:调整tabula识别参数,放行单行表格

你遇到的问题核心原因是tabula底层默认会过滤行数小于2的识别结果,需显式指定放行单行的参数,配合固定列位置提升识别准确率:

# 替换为你自己测量的区域坐标、列分割坐标
df_list = tabula.read_pdf(
    DIRECTORY + file_name,
    pages='all',
    pandas_options={'header': None},
    encoding="utf-8",
    area=[top, left, bottom, right],  # 你之前用Adobe测量的表格区域参数
    columns=[x1, x2, x3],  # 每列分割线的x坐标,n列需要传n-1个分割值
    guess=False,  # 关闭自动表格检测,避免单行被判定为普通文本过滤
    min_rows=1,  # 核心参数,允许识别仅1行的表格
    stream=True  # 无框表格保留该参数,有框表格替换为lattice=True
)

若使用旧版本tabula-py不支持min_rows参数,可替换为传java配置:

java_options=["-Dtabula.min.rows=1"]

方案2:兜底文本提取结构化

如果调整tabula参数后仍识别失败,可直接提取指定区域的原始文本再转DataFrame:

import fitz
import pandas as pd

doc = fitz.open(DIRECTORY + file_name)
page = doc[0]  # 替换为表格实际所在页码,页码从0开始计数
rect = fitz.Rect(x0, y0, x1, y1)  # 替换为你测量的表格区域坐标
text = page.get_text("text", clip=rect).strip()
# 按实际的文本分隔规则拆分,比如多空格、制表符等
row = [item.strip() for item in text.split() if item.strip()]
# 替换为实际的表格列名
df = pd.DataFrame([row], columns=["列1", "列2", "列3"])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 13:15:04