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

能否用Python将PDF图表中的时间序列数据转换为Excel?

能否用Python将含图表的PDF转换为Excel并提取时间序列数据?

可以实现,但具体难度取决于PDF中图表的存储格式:

1. 矢量格式图表(非图片)

这类图表由PDF生成工具直接插入,数据通常以文本或矢量元素形式存储在PDF内部,提取难度较低。

实现步骤:

  • 用PDF解析库定位图表区域,提取其中的日期和数值文本
  • 整理数据为结构化格式后导出到Excel

示例代码:

import pdfplumber
import pandas as pd
import re

# 打开目标PDF文件
with pdfplumber.open("blackrock_fund_prospectus.pdf") as pdf:
    # 定位图表所在页面(示例为第3页,索引从0开始)
    target_page = pdf.pages[2]
    # 裁剪图表区域(根据实际坐标调整,可通过pdfplumber可视化工具获取)
    chart_area = target_page.crop((100, 200, 700, 600))
    # 提取裁剪区域内的文本
    chart_text = chart_area.extract_text()
    
    # 正则匹配日期(示例为DD/MM/YYYY格式)与对应数值
    data_pattern = r"(\d{2}/\d{2}/\d{4})\s+([\d\.,]+)"
    matched_data = re.findall(data_pattern, chart_text)
    
    # 转换为DataFrame并导出到Excel
    df = pd.DataFrame(matched_data, columns=["日期", "基金数据"])
    df.to_excel("extracted_fund_data.xlsx", index=False)

2. 位图格式图表(图片/扫描件)

如果图表是嵌入的图片或扫描生成的,需要结合OCR(光学字符识别)和图像分析技术,难度较高,准确率依赖图像质量。

实现步骤:

  • 从PDF中提取图表图片
  • 预处理图片(降噪、增强对比度)
  • 用OCR提取文本,再匹配日期和数值

示例代码:

import cv2
import pytesseract
import pandas as pd
import fitz  # PyMuPDF

# 设置Tesseract路径(根据本地安装位置调整)
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

# 从PDF中提取图表图片
doc = fitz.open("blackrock_fund_prospectus.pdf")
page = doc[2]  # 目标页面
image_list = page.get_images()

# 提取第一张图片(假设图表是页面内的第一张图片)
xref = image_list[0][0]
base_image = doc.extract_image(xref)
image_bytes = base_image["image"]
with open("chart_image.png", "wb") as f:
    f.write(image_bytes)

# 图片预处理
img = cv2.imread("chart_image.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化增强文本对比度
thresh_img = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

# OCR提取文本并匹配数据
ocr_text = pytesseract.image_to_string(thresh_img)
data_pattern = r"(\d{2}/\d{2}/\d{4})\s+([\d\.,]+)"
matched_data = re.findall(data_pattern, ocr_text)

# 导出到Excel
df = pd.DataFrame(matched_data, columns=["日期", "基金数据"])
df.to_excel("extracted_image_chart_data.xlsx", index=False)

注意事项

  • 实际PDF结构可能复杂,需手动调整裁剪坐标或正则表达式以匹配特定格式
  • 如果PDF包含与图表搭配的数据表格,可用tabula-py直接提取表格数据,效率更高
  • 加密PDF需先解密才能进行解析操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:48:10