将100页PDF表格数据提取转换为CSV的Python技术求助
解决100页全表格PDF转CSV/Excel的问题
一、新手友好的工具选择
放弃PyPDF2这类通用文本提取库,用tabula-py——专门针对PDF表格提取的工具,配合pandas处理数据,完美解决空单元格和数字格式问题。
二、环境安装步骤
打开命令提示符(Windows)或终端(Mac/Linux),执行以下命令:
pip install tabula-py pandas
注:tabula-py依赖Java环境,如果安装失败,先去官网下载安装OpenJDK或Oracle JDK,把Java的bin目录添加到系统PATH环境变量,再重新执行上面的命令。
三、完整代码及逐行解释
复制以下代码到Python文件(比如pdf_extract.py),把PDF文件放在同一目录下,运行即可。
import tabula import pandas as pd # 1. 读取PDF所有页面的表格 # lattice=True:针对带边框的表格(你的PDF全是表格,必须开这个) # pages='all':提取所有页面,也可以指定范围比如'1-50' tables = tabula.read_pdf("MarketT_061223.pdf", pages='all', lattice=True) # 2. 合并所有页面的表格数据 # 把每页的表格合并成一个大的数据集,ignore_index重置行号避免重复 combined_df = pd.concat(tables, ignore_index=True) # 3. 修复数字格式:把识别错误的1.000(原1,000)转成正确数值 def fix_numbers(val): if isinstance(val, str): # 先把千分位的点换回逗号,再去掉逗号转成数值 val = val.replace('.', ',') try: return int(val.replace(',', '')) # 整数情况 except ValueError: return float(val.replace(',', '.')) # 小数情况 return val # 遍历所有列,处理数字格式问题 for col in combined_df.columns: combined_df[col] = combined_df[col].apply(fix_numbers) # 4. 处理空单元格:把空值换成空字符串(Excel/CSV里显示为空) combined_df = combined_df.fillna('') # 5. 导出为CSV文件 # encoding='utf-8-sig'避免Excel打开CSV时中文乱码 combined_df.to_csv("extracted_tables.csv", index=False, encoding='utf-8-sig') # 6. 直接导出为Excel(可选,跳过CSV直接生成) combined_df.to_excel("extracted_tables.xlsx", index=False)
代码关键部分解释
lattice=True:告诉tabula按表格边框识别单元格,彻底解决空单元格识别异常的问题。- 数字修复函数:针对你遇到的“1,000被识别成1.000”的问题,通过替换符号+转数值的方式修复,确保数字格式正确。
fillna(''):把识别出的空单元格统一处理为空字符串,避免CSV/Excel里出现NaN这类无效值。
四、测试与调整
- 先测试前几页:把
pages='all'改成pages='1-5',运行后打开CSV看看结果,确认没问题再跑全量。 - 如果某页表格识别不准:可以单独提取该页调试,比如
pages='20',调整lattice参数(如果是无框表格用stream=True)。
内容的提问来源于stack exchange,提问作者thefirst
相关产品推荐
相关产品推荐

