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

使用Python通过tabula-py转换PDF为CSV仅显示列名无内容如何解决

问题原因及解决方案

核心遗漏配置项

  • 未指定表格识别模式:tabula-py默认不会自动适配带边框/无边框的表格,90%的空数据问题都是因为没有开启lattice或stream参数
  • 未校验读取结果:直接对返回的DataFrame赋值列名导出,没有确认是否真的读取到了表格内容
  • 坐标参数匹配错误:自定义的area和columns坐标范围偏差,把表格内容排除在了识别区域外

具体操作步骤

  1. 先添加识别模式参数:如果你的PDF表格是带实线边框的,添加lattice=True;如果是无框靠空格分隔的文本表格,添加stream=True
  2. 读取后先校验数据:输出DataFrame的行数和内容,确认读取正常再做后续处理
  3. 调整坐标范围:如果加了识别模式还是空,先注释掉area和columns参数,让tabula自动识别页面内容,确认能读到数据后再微调坐标适配自定义列
  4. 导出CSV时添加可选参数避免冗余内容和乱码

修改后可运行的参考代码

#!/usr/bin/env python3
import tabula
import pandas as pd

pdf_file='document-page1.pdf'
column_names=['Product','Batch No','Machin No','Time','Date','Drum/Bag No','Tare Wt.kg','Gross Wt.kg',
              'Net Wt.kg','Blender','Remarks','Operator']

# Page 1 processing 带边框表格用lattice=True,无框表格替换为stream=True
df_list = tabula.read_pdf(
    pdf_file, 
    pages=1,
    lattice=True,
    area=(95,20, 800, 840),
    columns=[93,180,220,252,310,315,333,367,410,450,480,520],
    pandas_options={'header': None}
)

# 先校验是否读取到了表格
if len(df_list) == 0 or df_list[0].empty:
    print("未识别到表格内容,请调整识别参数或坐标范围")
else:
    df = df_list[0]
    # 确认列数匹配后再处理
    if df.shape[1] == len(column_names)+1:
        df = df.drop(columns=5)
        df.columns = column_names
        # 导出时去掉索引列,设置编码避免乱码
        df.to_csv('result.csv', index=False, encoding='utf_8_sig')
        print(f"导出成功,共{df.shape[0]}条数据")
    else:
        print(f"识别到的列数{df.shape[1]}与预期不匹配,请调整columns参数")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:45:02