1. PDF 分析师
为什么要将 PDF 转换为 CSV 或 Excel?
在我们研究这个任务之前,先聊聊为什么我们需要进行这样的转换吧。PDF 文档因为其静态性和便于打印的特点,在信息传递中被广泛使用。
然而,在数据分析中,PDF 并不是分析师的最佳伙伴。正是在这种情况下,CSV 和 Excel 文件登场了。它们非常适合分析,可以轻松地在 Excel 中打开,或者导入到任何分析工具中。阅读、过滤、排序和数据可视化都可以轻松完成。谁会不想用它们呢?
工具和库
为了完成我们的任务,我们会用到几个 Python 库,它们能够帮助我们解除 PDF 的“魔咒”,并将其变成令人惊叹的 CSV(或 Excel,如果你更喜欢的话)。这些库是 PyPDF2, PDFPlumber 和 pandas。PyPDF2 能让我们从 PDF 中提取文本,PDFPlumber 是处理这个任务的专业选手,而 pandas 则用于像表格一样处理数据。
如果你还没安装这些库,现在正是时候!在终端中输入以下命令:
pip install PyPDF2 PDFPlumber pandas
搞定了!现在开始行动吧!
2. 从 PDF 文档提取文本
使用 PyPDF2 提取文本
第一个任务是从 PDF 中提取宝贵的文本。为此,我们将使用 PyPDF2 库。让我们写一个小脚本,打开 PDF 文件并从文档的每一页提取文本。
import PyPDF2
# 打开文件
with open('sample.pdf', 'rb') as file:
reader = PyPDF2.PdfReader(file)
text = ""
# 遍历所有页面并提取文本
for page in reader.pages:
text += page.extract_text()
print(text) # 输出提取的文本
就这么简单!我们读取了文件并提取了其中的文本。但文本不同,有些可能需要额外处理,比如删除多余字符或者将其拆分成行。
使用 PDFPlumber 提取文本
PDFPlumber 对带表格和复杂结构的 PDF 处理得更加精确。它可以用于提取文本,还能处理表格。
import pdfplumber
# 打开 PDF 文件
with pdfplumber.open("sample_with_table.pdf") as pdf:
text = ""
for page in pdf.pages:
text += page.extract_text() + "\n"
print(text)
这个代码同样从所有页面提取文本,但与 PyPDF2 不同,PDFPlumber 对标记和表格的处理更胜一筹。
使用 PDFPlumber 从 PDF 提取表格
如果 PDF 中包含表格,PDFPlumber 可以将它们提取为列表,从而易于转换为 CSV 或 Excel。
import pdfplumber
import pandas as pd
# 打开 PDF 并提取表格
with pdfplumber.open("sample_with_table.pdf") as pdf:
all_tables = []
for page in pdf.pages:
table = page.extract_table()
if table:
all_tables.extend(table)
# 将数据转换为 DataFrame
df = pd.DataFrame(all_tables[1:], columns=all_tables[0]) # 第一行是标题
print(df)
此代码从 PDF 数据中创建表,并将其保存为 DataFrame,这让我们可以轻松保存为 CSV 或 Excel。
3. 保存数据
将文本转换为 DataFrame
现在我们已经有了文本,假设它是按行分隔的,每行是我们未来表格的一行。我们的任务是将其转换为 DataFrame,然后用 pandas 保存为 CSV 文件。
import pandas as pd
# 假设文本中的每一行对应一行数据
data = text.split('\n')
data = [row.split(',') for row in data if row.strip() != ''] # 按逗号分隔行
# 创建 DataFrame
df = pd.DataFrame(data[1:], columns=data[0]) # 第一行用作标题
# 保存 DataFrame 为 CSV
df.to_csv('output.csv', index=False)
这里我们只是将文本拆分为行,然后再分为单独的元素,并创建了 DataFrame,将第一行作为列标题。之后将其保存为 CSV 文件。耶!我们完成了过去可能需要手动解决的工作。
将数据转换为 CSV
从 PDF 提取文本或表格后,可以使用 Pandas 将数据保存为 CSV。
保存数据为 CSV
# 保存数据为 CSV
df.to_csv("output.csv", index=False)
print("数据已成功保存到 output.csv")
此代码将 DataFrame 中的 PDF 数据保存到文件 output.csv 中,您可以在任何表格编辑工具中打开它,或者将其上传到分析平台。
转换为 Excel
如果你想要的不是 CSV,而是 Excel,也没问题!pandas 提供了一切所需。只需将之前示例中的最后一行替换为:
df.to_excel('output.xlsx', index=False)
这样,您的 DataFrame 会被保存为 Excel 文件,之后您可以随心所欲地滚动查看,应用各种过滤器,用 Excel 的数据透视表让自己成为公司派对上的分析师之星。
特点和潜在问题
如同往常,我们的路上会遇到障碍。从 PDF 中提取文本有时像在给奶奶解释什么是云存储。一些 PDF 文件可能有复杂的结构,如表格、图表和图像,这些东西很难被转换为文本,尤其是结构化文本。在这种情况下,可能需要额外的文本处理、正则表达式,甚至是特殊的 OCR 库来从 PDF 中的图像提取数据。
此外,并非所有 PDF 文件都对自动化友好。有些 PDF 被加密或用密码保护。PyPDF2 支持处理密码,但加密问题会更加复杂。
GO TO FULL VERSION