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

Pandas将pdfminer提取的PDF表格数据写入CSV时格式错误如何解决

问题分析与修复方案

问题根因

  • 当前代码每匹配到一个坐标对应的文本就单独追加一行到结果表,导致每行仅单个列有值,其余列均为空,和预期的同组关联字段位于同一行的要求不符
  • 直接用==判断浮点数坐标容易出现精度误差,可能漏匹配符合条件的文本
  • pandas的append方法已在较新版本中弃用,运行时会抛出警告

修复后的代码

import os
import pandas as pd
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTTextBox
from pdfminer.pdfpage import PDFPage

path='My_Path'
# 定义坐标匹配阈值,避免浮点数精度问题导致匹配失败
COORD_TOLERANCE = 1e-3
results = []

for file_name in os.listdir(path):
    print(file_name)
    fp = open(os.path.join(path, file_name), 'rb')
    rsrcmgr = PDFResourceManager()
    laparams = LAParams()
    device = PDFPageAggregator(rsrcmgr, laparams=laparams)
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    pages = PDFPage.get_pages(fp)
    
    for page in pages:
        print('Processing next page...')
        interpreter.process_page(page)
        layout = device.get_result()
        # 初始化当前页的临时行数据,存储匹配到的三个字段
        row_data = {'c': None, 'd': None, 'f': None}

        for lobj in layout:
            if isinstance(lobj, LTTextBox):               
                x, y, text = lobj.bbox[0], lobj.bbox[3], lobj.get_text().strip()
                # 用阈值判断坐标匹配,规避浮点数精度误差
                if abs(x - 50.520000749999994) < COORD_TOLERANCE and abs(y - 200.30424779999996) < COORD_TOLERANCE:
                    row_data['c'] = text
                elif abs(x - 405.599991) < COORD_TOLERANCE and abs(y - 187.82423730000002) < COORD_TOLERANCE:
                    row_data['d'] = text
                elif abs(x - 562.4399872500001) < COORD_TOLERANCE and abs(y - 187.82423730000002) < COORD_TOLERANCE:
                    row_data['f'] = text
        # 当前页遍历完成后,将有有效数据的行加入结果列表
        if any(row_data.values()):
            results.append(row_data)

df_results = pd.DataFrame(results)
print(df_results)
# 指定utf-8-sig编码避免Excel打开时出现乱码,不需要分号分隔可修改sep参数为','
df_results.to_csv('coordinates_data.csv', index=False, sep=';', encoding='utf-8-sig')

额外优化说明

  • 用os.path.join拼接文件路径,兼容不同操作系统的路径分隔符规则
  • 提取文本时新增strip()方法,去除PDF文本自带的多余换行、空格
  • 统一将所有匹配完成的数据一次性转为DataFrame,运行效率更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:36:07