标签:Python与Excel,tabula-py
在本文中,我们将了解如何使用Python将PDF转换为Excel。如果你处理数据,那么很可能已经或将不得不处理存储在.pdf文件中的数据。从PDF复制表格并将其直接粘贴到Excel是很困难的,在大多数情况下,我们从PDF文件中复制的是文本,而不是格式化的Excel表格。因此,当将数据粘贴到Excel中时,我们会看到一块文本被压缩到一个单元格中。
当然,我们不希望将单个值逐个复制并粘贴到Excel中。使用Python,可以只需不到10行代码就可以获得相当好的结果。
我们将从世卫组织网站上按国家提取新冠病毒-19病例。你也可以到知识星球完美Excel社群上下载该文件。
步骤1:安装Python库和Java
tabula-py是tabla-java的Python包装器,它可以读取PDF文件中的表。这意味着我们需要先安装Java,安装过程大约需要1分钟,你可以按照下面的链接查找你的操作系统的Java安装文件:https://java.com/en/download/help/download_options.xml.
有了Java后,使用pip安装tabula-py:
pip install tabula-py
我们将提取这个PDF文件第3页上的表,tabula.read_pdf()返回数据框架列表。出于某种原因,tabula在这个页面上检测到8个表,通过查看它们,我们看到第二个表是我们想要提取的。因此,我们指定使用[1]获取该列表的第二个元素。
import tabula
df = tabula.read_pdf(‘data.pdf’,pages = 3, lattice = True)[1]
如果这是你第一次安装Java和tabula-py,那么在运行上述两行代码时可能会收到以下错误消息:
图1
这是因为Java文件夹不在PATH系统变量中,只需将Java安装文件夹添加到PATH变量。由于使用了默认安装,因此在我的电脑上,Java文件夹是C:\Program Files\Java\jre1.8.0_311\bin。
图2
现在,脚本应该能够正常运行了。
默认情况下,tabula-py会将表格从PDF文件提取到数据框架中。使用.head(10)检查前10行,数据如下:
图3
可以看到这个未处理的表有两个问题:标题行包含奇怪的字母“\r”,并且有许多NaN值。需要做一些进一步的清理,使数据变得有用。
步骤2:清理标题行
首先清理标题行。df.columns返回数据框架标题行名称。
图4
我们可以通过执行以下操作替换标题中的“\r”:
df.columns = df.columns.str.replace('\r',' ')
.str返回标题的所有字符串值,然后可以执行.replace()函数以将“\r”替换为空格。接着,将干净的字符串值赋值回数据框架的标题(列)。
步骤3:删除NaN值
接下来,我们将清除由函数tabula.read_pdf()创建的NaN值,以便在特定单元格为空时使用。在进行数据分析时,这些值会给我们带来麻烦,因此大多数情况下,我们会删除它们。浏览一下表,我们似乎可以删除包含NaN值的行,而不会丢失任何数据点。幸运的是,pandas提供了一种方便的方法来删除具有NaN值的行。
data = df.dropna()
data.to_excel(r'D:\data-1.xlsx')
图5
将代码放到一起
import tabula
df = tabula.read_pdf('D:\data.pdf',pages = 3, lattice = True)[1]
df.columns =df.columns.str.replace('\r', ' ')
data = df.dropna()
data.to_excel(r'D:\data-1.xlsx')
可以看到,使用Python将PDF转换为Excel只需要5行代码。它简单而强大,并且你可以控制要提取、保留和更改的内容。
注:本文学习整理自pythoninoffice.com。
欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。