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
現在我們有文本了,假設它被分行了,每行表示未來表格的一行。我們的任務是用 pandas 將其轉換為 DataFrame,然後保存為 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")
這段代碼將 PDF 提取出的數據保存到文件 output.csv 中,然後就能在任意表格編輯器或分析平台中打開它。
轉換為 Excel
如果你更想要 Excel 文件?沒問題!pandas 提供了一切。只需將前面的最後一行代碼替換為:
df.to_excel('output.xlsx', index=False)
這樣,您的 DataFrame 就被保存為 Excel 文件,您可以在裡面隨意翻滾、使用篩選功能,甚至 Excel 樞紐分析表。讓你瞬間成為公司聚會上的分析之星!
特殊情況與挑戰
跟往常一樣,我們的路上會遇到些障礙。從 PDF 文件中提取文本,有時很像向奶奶解釋什麼是雲端存儲。一些 PDF 文件可能含有複雜的結構,比如表格、圖表和圖片,轉換成文本尤其是結構化文本並不容易。在這種情況下,您可能需要進一步的文本處理,使用正則表達式,甚至用專門的 OCR 庫來提取嵌入 PDF 中圖片內的數據。
此外,並不是所有 PDF 文件都友好於自動化。一些文件可能被加密或受密碼保護。PyPDF2 支持處理密碼,但面對加密的文件往往更加困難。
GO TO FULL VERSION