使用 Python + Pandas 從包含多個工作表的 Excel 中擷取數據

Chia Yin Chen
3 min readJul 6, 2018

--

Photo by Dmitry Ratushny on Unsplash

我必須將 Excel 中多個工作表合併成一個工作表,但除了手動複製貼上內容以外,沒有其他的選擇了,好讓人心煩啊 🤯

如果你有這樣的煩惱,這篇文章推薦使用 Python + Pandas 解決你的問題。

大多數人都熟悉從 Excel 中獲取資料,但它和其他常見的 CSV、TXT 或 JSON 格式不同的是 Excel 不完全屬於純文字檔案,內容可能還包含了圖片、圖表或是缺乏欄位概念的一串文字等,如果你對資料處理有興趣,推薦你可以把 Excel 檔案作為練功對象。

這篇文章選擇了 政府開放資料 – 各縣市戶數結構 作為示範資料,其為多個工作表 ( multi-sheet ) 的 Excel 檔案,總共有 11 個工作表 ( sheet ) 分別命名為年份 96 ~ 106,每個工作表都有對應年份縣市戶數的資料。

我們目的是要把 11 個不同的工作表組合成一個資料表,並將其匯出為一個 CSV 的資料格式。

用 Excel 來檢視示範資料

❶ 載入資料

使用 pandas 的 read_excel() 讀取 Excel 檔案,且可使用 ExcelFile()sheet_names 屬性來列出所有工作表名稱。

📝 Parameters Note:1. skiprows: 指定在讀取時跳過前 n 列的資料2. sheet_name: 預設為只讀取第一個工作表,指定 sheet_name=None 表示讀取所有的工作表* 查看 read_excel() Document 調整更多符合你的參數,在這個範例中,只需用到上述的參數即可達到目的。

❷ 數據清理

我們觀察到目前的資料存在了很多雜訊和干擾:

↪︎ 欄位包含全/半型空白

↪︎ 文字資料包含全/半型空白及數字資料為浮點數

↪︎ 存在一些缺乏欄位概念的文字

💪 接著我們開始逐一對以上的雜訊進行清洗:

❸ 合併資料

回顧上一步驟 ➩ 對每個工作表分別創建一個 DataFrame,經過數據清理後的 DataFrame 分別的列數與行數如下:

剩下最後一個步驟就可達到我們的目的 :使用 pandas 的 concat() 合併多個 DataFrame,並將最終的 DataFrame 存成 CSV 。

善用 Pandas 的處理技巧,幫助我們省下許多需要手動把不同工作表資料合而為一的時間,間接提升工作效率 👍

所有程式碼都可以在下面的 Jupyter Notebook 中找到:

--

--