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

使用pdfquery与Pandas实现多页PDF抓取时遇ValueError问题求助

问题分析与修复方案

代码核心问题

  1. pdfscrape函数无返回值:这个函数只完成了数据提取,但没有返回生成的DataFrame,导致循环里page = pdfscrape(pdf)得到的是None,这就是报错"All objects passed were None"的直接原因。
  2. DataFrame合并语法错误:循环里master = master(pd.concat(...))是把DataFrame对象当成函数调用,完全不符合Pandas语法,正确做法是用pd.concat合并新旧DataFrame。
  3. 页面加载逻辑冲突:初始的pdf.load()会加载所有页面,后续循环里再加载单页容易导致数据混乱,应该针对单页单独加载。
  4. CSV重复写入:把to_csv放在循环里会每次覆盖文件,应该等所有页面数据合并完成后再导出。

修正后的完整代码

import pdfquery
import pandas as pd

def pdfscrape(pdf):
    # 提取指定坐标的文本内容
    num_1 = pdf.pq('LTTextBoxHorizontal:overlaps_bbox("378.0, 759.06, 456.0, 769.06")').text()
    num_2 = pdf.pq('LTTextBoxHorizontal:overlaps_bbox("30.0, 431.06, 360.0, 441.06")').text()
    # 返回单页数据的DataFrame
    return pd.DataFrame({'num1': [num_1], 'num2': [num_2]})

# 初始化PDFQuery对象
pdf = pdfquery.PDFQuery(r'path')
# 获取PDF总页数
pagecount = pdf.doc.catalog['Pages'].resolve()['Count']

# 初始化空的主DataFrame,用于存储所有页面数据
master = pd.DataFrame()

for p in range(pagecount):
    # 加载当前待处理的单页
    pdf.load(pages=[p])
    # 调用函数获取单页数据
    page = pdfscrape(pdf)
    # 将单页数据合并到主DataFrame
    master = pd.concat([master, page], ignore_index=True)

# 所有页面处理完成后,导出为CSV文件
master.to_csv("output.csv", index=False)
print(master)

关键修改说明

  • 给pdfscrape函数添加return语句,返回单页数据的DataFrame,确保page变量始终有有效数据。
  • 调整合并逻辑为pd.concat([master, page], ignore_index=True),正确实现多页数据的累加合并。
  • 改用pdf.load(pages=[p])加载单页,避免全量加载导致的冲突。
  • 将to_csv移到循环外,确保只导出一次完整的合并数据,避免重复覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:56:18