首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >手把手教你用Python提取PDF中的表格

手把手教你用Python提取PDF中的表格

作者头像
玖柒的小窝
修改于 2021-11-21 13:59:31
修改于 2021-11-21 13:59:31
2.1K00
代码可运行
举报
文章被收录于专栏:各类技术文章~各类技术文章~
运行总次数:0
代码可运行

前言

pdfplumber 是一个开源的 python 工具库 ,它可以轻松的获取 PDF 文本内容、标题、表格、尺寸等各种信息,今天来介绍如何使用它来提取 PDF 中的表格。

安装

首先通过下面命令安装 pdfplumber 模块。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install pdfplumber
复制代码

或是使用豆瓣镜像源安装。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install -i https://pypi.douban.com/simple pdfplumber
复制代码

案例

这里有一份2020年中国大学生计算机设计大赛参赛作品获奖名单,文件为 PDF 格式,每页都包含表格,表格中包含为各支队伍的获奖信息,共158页。表格前两页内容如下。

下面将 PDF 中的表格提取出来,并保存到 Excel 中。

首先导入所需要的模块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pdfplumber
import pandas as pd
复制代码

读取 PDF 文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
read_path = '2020年中国大学生计算机设计大赛参赛作品获奖名单.pdf'
pdf_2020 = pdfplumber.open(read_path)
复制代码

pages 属性包含 PDF 中每页的信息,循环每页内容,使用 extract_table() 方法提取每页中的表格数据,并将数据转为 DataFrame,最后合并每页的数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
result_df = pd.DataFrame()
for page in pdf_2020.pages:
    table = page.extract_table()
    df_detail = pd.DataFrame(table[1:], columns=table[0])
    # 合并每页的数据集
    result_df = pd.concat([df_detail, result_df], ignore_index=True)
复制代码

此时DataFrame中数据如下:

可以看到通过 extract_table() 提取后的数据有许多包含缺失值的列,我们还需要对DataFrame进行进一步处理,删除全为缺失值的列。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
result_df.dropna(axis=1, how='all', inplace=True)
复制代码

删了缺失值后,列名也一并删除了,还需要指定对应列名。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
result_df.columns = ['奖项', '作品编号', '作品名称', '参赛学校', '作者', '指导老师']
复制代码

到现在我们就成功将表格信息完整的提取出来了!

完整代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pdfplumber
import pandas as pd

def read_pdf(read_path, save_path):
    pdf_2020 = pdfplumber.open(read_path)
    result_df = pd.DataFrame()
    for page in pdf_2020.pages:
        table = page.extract_table()
        print(table)
        df_detail = pd.DataFrame(table[1:], columns=table[0])
        result_df = pd.concat([df_detail, result_df], ignore_index=True)
    result_df.dropna(axis=1, how='all', inplace=True)
    result_df.columns = ['奖项', '作品编号', '作品名称', '参赛学校', '作者', '指导老师']
    result_df.to_excel(excel_writer=save_path, index=False, encoding='utf-8')

read_path = r'2020年中国大学生计算机设计大赛参赛作品获奖名单.pdf'
save_path = r'2020年中国大学生计算机设计大赛参赛作品获奖名单.xlsx'
read_pdf(read_path, save_path)

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 安装
  • 案例
  • 完整代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档