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

将100页PDF表格数据提取转换为CSV的Python技术求助

解决100页全表格PDF转CSV/Excel的问题

一、新手友好的工具选择

放弃PyPDF2这类通用文本提取库,用tabula-py——专门针对PDF表格提取的工具,配合pandas处理数据,完美解决空单元格和数字格式问题。

二、环境安装步骤

打开命令提示符(Windows)或终端(Mac/Linux),执行以下命令:

pip install tabula-py pandas

注:tabula-py依赖Java环境,如果安装失败,先去官网下载安装OpenJDK或Oracle JDK,把Java的bin目录添加到系统PATH环境变量,再重新执行上面的命令。

三、完整代码及逐行解释

复制以下代码到Python文件(比如pdf_extract.py),把PDF文件放在同一目录下,运行即可。

import tabula
import pandas as pd

# 1. 读取PDF所有页面的表格
# lattice=True:针对带边框的表格(你的PDF全是表格,必须开这个)
# pages='all':提取所有页面,也可以指定范围比如'1-50'
tables = tabula.read_pdf("MarketT_061223.pdf", pages='all', lattice=True)

# 2. 合并所有页面的表格数据
# 把每页的表格合并成一个大的数据集,ignore_index重置行号避免重复
combined_df = pd.concat(tables, ignore_index=True)

# 3. 修复数字格式:把识别错误的1.000(原1,000)转成正确数值
def fix_numbers(val):
    if isinstance(val, str):
        # 先把千分位的点换回逗号,再去掉逗号转成数值
        val = val.replace('.', ',')
        try:
            return int(val.replace(',', ''))  # 整数情况
        except ValueError:
            return float(val.replace(',', '.'))  # 小数情况
    return val

# 遍历所有列,处理数字格式问题
for col in combined_df.columns:
    combined_df[col] = combined_df[col].apply(fix_numbers)

# 4. 处理空单元格:把空值换成空字符串(Excel/CSV里显示为空)
combined_df = combined_df.fillna('')

# 5. 导出为CSV文件
# encoding='utf-8-sig'避免Excel打开CSV时中文乱码
combined_df.to_csv("extracted_tables.csv", index=False, encoding='utf-8-sig')

# 6. 直接导出为Excel(可选,跳过CSV直接生成)
combined_df.to_excel("extracted_tables.xlsx", index=False)

代码关键部分解释

  • lattice=True:告诉tabula按表格边框识别单元格,彻底解决空单元格识别异常的问题。
  • 数字修复函数:针对你遇到的“1,000被识别成1.000”的问题,通过替换符号+转数值的方式修复,确保数字格式正确。
  • fillna(''):把识别出的空单元格统一处理为空字符串,避免CSV/Excel里出现NaN这类无效值。

四、测试与调整

  1. 先测试前几页:把pages='all'改成pages='1-5',运行后打开CSV看看结果,确认没问题再跑全量。
  2. 如果某页表格识别不准:可以单独提取该页调试,比如pages='20',调整lattice参数(如果是无框表格用stream=True)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:55:26