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

使用Camelot将PDF表格转换为Pandas DataFrame时的多列文件解析异常问题

PDF表格转Pandas DataFrame:Camelot解析差异问题排查与解决

我最近在搭建一套简便的PDF表格数据提取工具,目标是把PDF里的表格直接转成Pandas DataFrame,基础代码如下:

import camelot
import pandas as pd
pdf = camelot.read_pdf("file1.pdf")
print(pdf[0].df)

测试了两个PDF文件后遇到了一个奇怪的问题:

  • File 1用默认配置就能完美解析,表格数据完整提取到DataFrame里
  • File 2默认情况下完全拿不到任何数据——它的列数确实比File 1多,但我不认为这是核心障碍。后来试着给read_pdf方法加上flavor="stream"参数,居然成功从File 2里提取到了完整的表格数据。

解析结果对比

File 1解析结果(默认lattice模式)

ID产品名称单价库存
1笔记本3999120
2鼠标99500

File 2解析结果(stream模式)

订单号客户名称联系电话收货地址下单日期商品清单
OD2024001张三138xxxx1234北京市朝阳区2024-01-01键盘×2
OD2024002李四139xxxx5678上海市浦东新区2024-01-02显示器×1

问题原因分析

Camelot默认用的lattice模式是靠PDF里的表格边框线来识别表格结构的,如果File 2的表格是无框线设计,或者边框线非常淡、甚至是用空格/缩进模拟的列分隔,lattice模式就会识别失败。而stream模式是基于文本的位置、间距来推断列的边界,刚好适配这类没有明确物理边框的表格。

后续优化建议

如果需要批量处理不同类型的PDF,可以考虑做个简单的逻辑判断:

  • 先尝试默认的lattice模式提取,若返回的表格为空或数据异常,自动切换到stream模式
  • 针对stream模式,还可以通过table_regions参数指定表格在页面的坐标范围,或者用columns手动定义列分隔的位置,进一步提升提取精度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 14:29:11