CodeGym /课程 /Python SELF ZH /从 PDF 文本转换为 CSV 或 Excel 格式以进行数据分析

从 PDF 文本转换为 CSV 或 Excel 格式以进行数据分析

Python SELF ZH
第 44 级 , 课程 1
可用

1. PDF 分析师

为什么要将 PDF 转换为 CSV 或 Excel?

在我们研究这个任务之前,先聊聊为什么我们需要进行这样的转换吧。PDF 文档因为其静态性和便于打印的特点,在信息传递中被广泛使用。

然而,在数据分析中,PDF 并不是分析师的最佳伙伴。正是在这种情况下,CSV 和 Excel 文件登场了。它们非常适合分析,可以轻松地在 Excel 中打开,或者导入到任何分析工具中。阅读、过滤、排序和数据可视化都可以轻松完成。谁会不想用它们呢?

工具和库

为了完成我们的任务,我们会用到几个 Python 库,它们能够帮助我们解除 PDF 的“魔咒”,并将其变成令人惊叹的 CSV(或 Excel,如果你更喜欢的话)。这些库是 PyPDF2, PDFPlumber 和 pandas。PyPDF2 能让我们从 PDF 中提取文本,PDFPlumber 是处理这个任务的专业选手,而 pandas 则用于像表格一样处理数据。

如果你还没安装这些库,现在正是时候!在终端中输入以下命令:

Bash
pip install PyPDF2 PDFPlumber pandas

搞定了!现在开始行动吧!

2. 从 PDF 文档提取文本

使用 PyPDF2 提取文本

第一个任务是从 PDF 中提取宝贵的文本。为此,我们将使用 PyPDF2 库。让我们写一个小脚本,打开 PDF 文件并从文档的每一页提取文本。

Python

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 处理得更加精确。它可以用于提取文本,还能处理表格。

Python

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。

Python

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 文件。

Python

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

Python

# 保存数据为 CSV
df.to_csv("output.csv", index=False)
print("数据已成功保存到 output.csv")

此代码将 DataFrame 中的 PDF 数据保存到文件 output.csv 中,您可以在任何表格编辑工具中打开它,或者将其上传到分析平台。

转换为 Excel

如果你想要的不是 CSV,而是 Excel,也没问题!pandas 提供了一切所需。只需将之前示例中的最后一行替换为:

Python

df.to_excel('output.xlsx', index=False)

这样,您的 DataFrame 会被保存为 Excel 文件,之后您可以随心所欲地滚动查看,应用各种过滤器,用 Excel 的数据透视表让自己成为公司派对上的分析师之星。

特点和潜在问题

如同往常,我们的路上会遇到障碍。从 PDF 中提取文本有时像在给奶奶解释什么是云存储。一些 PDF 文件可能有复杂的结构,如表格、图表和图像,这些东西很难被转换为文本,尤其是结构化文本。在这种情况下,可能需要额外的文本处理、正则表达式,甚至是特殊的 OCR 库来从 PDF 中的图像提取数据。

此外,并非所有 PDF 文件都对自动化友好。有些 PDF 被加密或用密码保护。PyPDF2 支持处理密码,但加密问题会更加复杂。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION