CodeGym /課程 /Python SELF TW /從 PDF 文本轉換為 CSV 或 Excel 格式進行數據分析

從 PDF 文本轉換為 CSV 或 Excel 格式進行數據分析

Python SELF TW
等級 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

現在我們有文本了,假設它被分行了,每行表示未來表格的一行。我們的任務是用 pandas 將其轉換為 DataFrame,然後保存為 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")

這段代碼將 PDF 提取出的數據保存到文件 output.csv 中,然後就能在任意表格編輯器或分析平台中打開它。

轉換為 Excel

如果你更想要 Excel 文件?沒問題!pandas 提供了一切。只需將前面的最後一行代碼替換為:

Python

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

這樣,您的 DataFrame 就被保存為 Excel 文件,您可以在裡面隨意翻滾、使用篩選功能,甚至 Excel 樞紐分析表。讓你瞬間成為公司聚會上的分析之星!

特殊情況與挑戰

跟往常一樣,我們的路上會遇到些障礙。從 PDF 文件中提取文本,有時很像向奶奶解釋什麼是雲端存儲。一些 PDF 文件可能含有複雜的結構,比如表格、圖表和圖片,轉換成文本尤其是結構化文本並不容易。在這種情況下,您可能需要進一步的文本處理,使用正則表達式,甚至用專門的 OCR 庫來提取嵌入 PDF 中圖片內的數據。

此外,並不是所有 PDF 文件都友好於自動化。一些文件可能被加密或受密碼保護。PyPDF2 支持處理密碼,但面對加密的文件往往更加困難。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION