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

如何将PDF中的数据转换为可操作的pandas DataFrame?

将PDF底部非表格数据转为Pandas DataFrame的解决方案

1. 提取PDF文本

优先用pdfplumber工具,它对文本位置的识别更精准,方便定位底部内容。先安装依赖:

pip install pdfplumber pandas

提取目标页面文本的代码:

import pdfplumber

# 替换为你的PDF文件路径
with pdfplumber.open("sample.pdf") as pdf:
    # 取最后一页(数据在倒数第N页就改[-N])
    target_page = pdf.pages[-1]
    full_text = target_page.extract_text()

2. 定位目标数据段

根据PDF里数据的前后固定标识截取内容:

# 替换为你PDF里数据起始的关键词
start_mark = "目标数据开始的标识文本"
# 数据有结束标识就填,没有就注释掉该行
end_mark = "目标数据结束的标识文本"

start_pos = full_text.find(start_mark)
if end_mark:
    end_pos = full_text.find(end_mark, start_pos)
    target_text = full_text[start_pos:end_pos].strip()
else:
    target_text = full_text[start_pos:].strip()

# 按行拆分并清理空行
clean_lines = [line.strip() for line in target_text.split("\n") if line.strip()]

3. 转换为DataFrame

根据数据的实际格式调整拆分逻辑:

  • 键值对格式(比如"名称: 张三"):
import pandas as pd

data_list = []
for line in clean_lines:
    # 按冒号拆分,处理两侧空格
    key, val = [item.strip() for item in line.split(":", maxsplit=1)]
    data_list.append({"字段": key, "值": val})

df = pd.DataFrame(data_list)
  • 多列结构化数据(比如每行用空格分隔多列内容):
# 替换为实际的列名
col_names = ["列1", "列2", "列3"]
data_list = []
for line in clean_lines:
    # 按空格拆分,过滤多余空格
    cols = [item for item in line.split() if item]
    data_list.append(dict(zip(col_names, cols)))

df = pd.DataFrame(data_list)

4. 正则匹配进阶方案

如果数据有固定格式,用正则直接提取更高效,比如匹配所有"XX: 数值"的内容:

import re

# 正则模式根据实际数据调整
pattern = r"(\S+):\s*([\d\w\s]+)"
matches = re.findall(pattern, target_text)
df = pd.DataFrame(matches, columns=["字段", "数值"])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:32:00