使用Python提取PDF中不规则表格数据的求助
使用Python提取PDF中不规则表格数据的求助
我现在遇到了一个棘手的问题:需要从1000多份PDF文件里提取表格数据,用来做均值、中位数、标准差这些统计分析,还要生成图表——手动处理肯定不现实。
我先试了Camelot,结果完全没提取到表格(返回0个表格);后来又用Tabula写了一段基础代码:
from tabula import read_pdf from tabulate import tabulate # 读取PDF中的表格 df = read_pdf("pdf_downloads/gpaDistribution/2019_FALL_ENGINEERING.pdf", pages="1") # PDF文件路径 print(df)
但运行后得到的是一堆错误的DataFrame,数据完全乱掉了,示例输出如下:
[Empty DataFrame Columns: [MALE, FEMALE, TOTAL, MALE.1, FEMALE.1, TOTAL.1, MALE.2, FEMALE.2, TOTAL.2, MALE.3, FEMALE.3, TOTAL.3, MALE.4, FEMALE.4, TOTA] Index: [], Empty DataFrame Columns: [237, 559, 128, 687, 525, 110, 635, 1300, 470, 1770, 2582, 747, 3329] Index: [], Empty DataFrame Columns: [46, 236, 62, 298, 304, 77, 381, 744, 259, 1003, 1319, 409, 1728] Index: [], Empty DataFrame Columns: [126, 361, 102, 463, 462, 103, 565, 1021, 335, 1356, 1946, 564, 2510] Index: [], Empty DataFrame Columns: [70, 252, 110, 362, 389, 103, 492, 898, 244, 1142, 1597, 469, 2066] Index: [], Empty DataFrame Columns: [204, 348, 117, 465, 489, 136, 625, 1047, 254, 1301, 2043, 552, 2595] Index: [], Empty DataFrame Columns: [48, 177, 61, 238, 221, 58, 279, 488, 113, 601, 922, 244, 1166] Index: [], Empty DataFrame Columns: [61, 173, 64, 237, 213, 57, 270, 395, 98, 493, 831, 230, 1061] ...
这些结果要么是空DataFrame,要么把原本的表格数据拆成了零散的独立列,完全不是我需要的完整表格结构。
我的样本PDF是学期GPA分布类的表格,排版存在一些不规则情况(比如合并单元格、跨列表头)。有没有大佬能给点可行的建议,帮我正确提取这类PDF里的表格数据?
备注:内容来源于stack exchange,提问作者CompressedSquid




