如何将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
相关产品推荐
相关产品推荐

