HOWTO · Pandas

將 Pandas DataFrame 匯出到 Excel 檔案

本教程介紹了有關如何將 Pandas DataFrame 匯出到 excel 檔案的各種方法

本頁內容

使用 Pandas 的 DataFrame.to_excel() 將 DataFrame 匯出為 Excel 活頁簿。若不希望列標籤出現在工作表欄位中,請設定 index=False。需要將多個表格寫入同一個活頁簿,或設定寫入引擎時,請使用 ExcelWriter。

使用 to_excel() 將 DataFrame 匯出為 Excel 檔案

呼叫 to_excel() 並提供檔名,即可儲存單一 DataFrame。Pandas 預設會將 DataFrame 的索引寫入工作表的第一欄;若工作表只應包含 DataFrame 中有名稱的欄位,請傳入 index=False。可參閱 DataFrame.to_excel() 參考文件了解可用選項。

此範例會建立一個簡單的銷售資料表,並將欄位寫入目前工作目錄中的 sales.xlsx。對於 .xlsx 檔案,Pandas 會選用環境中已安裝的 Excel 寫入引擎;如果環境尚未提供相容的引擎,請安裝 openpyxl 或 XlsxWriter 等支援的套件。

import pandas as pd

sales = pd.DataFrame(
    {
        "product": ["Keyboard", "Mouse"],
        "units": [12, 25],
    }
)
sales.to_excel("sales.xlsx", index=False)
print("Saved sales.xlsx")
Saved sales.xlsx

儲存的活頁簿會包含 product 和 units 欄位,不會多出索引欄。這些欄位標籤在未變更的範例中保持英文。若要納入列標籤,請省略 index=False。相對檔名會以程序目前的工作目錄為基準解析;若要儲存到其他位置,請提供絕對路徑或包含目錄的路徑。

請依試算表的用途決定是否輸出索引。若 DataFrame 索引包含有意義的列標籤,例如尚未存放在欄位中的識別碼,請保留索引。若讀者只需要查看具名資料欄,或其他系統要求固定的標題欄位,則可關閉索引。每次呼叫 to_excel() 都能設定此選項,包括透過 ExcelWriter 呼叫時。

請選擇程序有權寫入的路徑,並在需要時先建立其上層目錄;Pandas 會寫入活頁簿檔案,但不會建立不存在的目錄。也可以傳入完整路徑,讓儲存位置不受指令碼啟動目錄影響。無論程式是從編輯器、筆記本或排程工作執行,這些設定都有助於找到輸出的活頁簿。

使用 ExcelWriter 寫入 DataFrame

需要控制活頁簿的建立方式或寫入多個 DataFrame 時,請將 ExcelWriter 用作上下文管理器。程式離開區塊時,上下文管理器會關閉並完成活頁簿的寫入。Pandas 預設會選用已安裝的 Excel 寫入引擎;如有需要,請安裝 openpyxl 或 XlsxWriter 等支援的引擎。

import pandas as pd

students = pd.DataFrame(
    {
        "student": ["Sam", "Ali", "Sara"],
        "marks": [88, 93, 79],
    }
)

with pd.ExcelWriter("student-results.xlsx") as writer:
    students.to_excel(writer, sheet_name="Results", index=False)
print("Saved student-results.xlsx")
Saved student-results.xlsx

ExcelWriter 會透過 to_excel() 接收 DataFrame,而 sheet_name 則用來設定工作表索引標籤。請使用上下文管理器,而不要直接呼叫寫入器的 save() 方法;即使區塊提前結束,它也會處理活頁簿的完成作業。除非另行指定路徑,檔案會儲存在目前工作目錄中。

將多個 DataFrame 匯出至不同的 Excel 工作表

在每次呼叫 DataFrame 的 to_excel() 時傳入同一個 ExcelWriter 物件,即可將多個表格放入同一本活頁簿。為每次呼叫指定不同的 sheet_name,讓讀者能在各自的工作表中找到對應表格。以下範例會將三個科目資料表寫入同一本活頁簿;執行時需要安裝 Pandas 和 Excel 寫入引擎。

import pandas as pd

science = pd.DataFrame({"student": ["Ali", "Umar"], "score": [88, 60]})
computing = pd.DataFrame({"student": ["Ali", "Umar"], "score": [73, 63]})
arts = pd.DataFrame({"student": ["Ali", "Umar"], "score": [95, 63]})

with pd.ExcelWriter("student-results.xlsx") as writer:
    science.to_excel(writer, sheet_name="Science", index=False)
    computing.to_excel(writer, sheet_name="Computing", index=False)
    arts.to_excel(writer, sheet_name="Arts", index=False)
print("Saved student-results.xlsx with three worksheets")
Saved student-results.xlsx with three worksheets

這三次呼叫都會寫入同一本活頁簿,而各自的 sheet_name 值會決定工作表名稱。工作表名稱應彼此不同,並符合 Excel 的工作表名稱限制。如果 Pandas 顯示找不到可用的 Excel 寫入引擎,請在執行指令碼的環境中安裝 openpyxl 或 XlsxWriter 等支援的引擎。