所有入門單元免費開放 · 課程內容持續更新中

用 pandas 整理表格

用 pandas 讀進 CSV 和 Excel,幾行程式就能篩選、分組加總,再輸出成有多個工作表的 Excel 檔。

第 2.2 堂約 16 分鐘

為什麼不直接用 Excel?

Excel 很好用,這堂課也不是要你放棄它。但如果你每個月都要做同樣的事:打開報表、篩選某些列、做樞紐分析、另存新檔……那就很適合交給 Python。

寫成程式的好處是:下個月只要換檔案、按一次執行。步驟寫在程式裡,不會漏做,也不會因為手滑點錯格子而算錯。

pandas 是 Python 處理表格最常用的套件。「套件」就是別人寫好、可以下載來用的工具包。

安裝 pandas

在終端機輸入(Mac 請把 python 換成 python3):

python -m pip install pandas openpyxl

pip 是 Python 的套件安裝工具。openpyxl 是讓 pandas 能讀寫 .xlsx 檔的幫手,兩個一起裝。

準備練習資料

如果你做過「Python 第一步」的記帳小工具,可以直接用你的 expenses.csv。沒有的話,建立一個 expenses.csv,貼上下面的內容:

date,category,item,amount
2026-11-01,餐費,雞腿便當,85
2026-11-01,交通,捷運,30
2026-11-02,餐費,珍奶,60
2026-11-03,娛樂,電影,300
2026-11-03,餐費,牛肉麵,150
2026-11-04,交通,計程車,220
2026-11-05,餐費,早餐,55

讀進來:DataFrame

import pandas as pd

df = pd.read_csv("expenses.csv", encoding="utf-8-sig")
print(df.head())
print(df.shape)

import pandas as pd 是大家的慣例寫法,之後用 pd 代表 pandas。

df 是 DataFrame 的縮寫,你可以把它想成「程式裡的一張 Excel 表」:有欄位名稱、有一列一列的資料。df.head() 顯示前 5 列,df.shape 告訴你有幾列幾欄,這裡會是 (7, 4)。

讀 Excel 也一樣簡單:

df = pd.read_excel("公司報表.xlsx", sheet_name="11月")

流程圖:CSV 或 Excel 檔用 read_csv、read_excel 讀進 DataFrame,經過篩選和分組加總,再用 to_excel 輸出成新的 Excel 檔,原始檔不變

讀進來、處理、寫出去。原始檔案從頭到尾都沒被改到。

篩選:只看你要的列

big = df[df["amount"] >= 100]
print(big)

food = df[df["category"] == "餐費"]
print(food["amount"].sum())

df["amount"] >= 100 會對每一列檢查一次,得到一串 True 和 False,再放進 df[...] 裡,就只留下 True 的那幾列。效果跟 Excel 的「篩選」一樣。

兩個條件要同時成立時,用 & 連接,每個條件各自加括號:

big_food = df[(df["category"] == "餐費") & (df["amount"] >= 100)]

分組加總:取代樞紐分析

上一個單元我們用迴圈加字典,寫了好幾行才做到「依類別加總」。用 pandas 只要一行:

summary = df.groupby("category")["amount"].sum().sort_values(ascending=False)
print(summary)
category
餐費    350
娛樂    300
交通    250
Name: amount, dtype: int64

由左往右讀:依 category 分組 → 取 amount 欄 → 加總 → 由大到小排序。

分組加總示意圖:七筆花費依類別分成餐費、交通、娛樂三組,每組各自加總,最後合併成一張小計表

除了 sum(),也可以用 mean()(平均)、count()(筆數)、max()(最大值)。

輸出成 Excel

with pd.ExcelWriter("11月記帳.xlsx") as writer:
    df.to_excel(writer, sheet_name="明細", index=False)
    summary.to_excel(writer, sheet_name="小計")

這樣會產生一個有兩個工作表的 Excel 檔。index=False 是不要把 pandas 自動加的列編號(0、1、2……)也寫進去。

和 AI 一起用 pandas

pandas 的功能非常多,沒有人全部背得起來,資深工程師也常常要查。這正是 AI 最能幫上忙的地方:你描述想要的結果,它告訴你用哪個函式。

可以這樣問 Claude

我有一個 pandas DataFrame,欄位是 date(文字,格式像 2026-11-03)、category、item、amount。我想做一張表:每一列是一個月份,每一欄是一個類別,格子裡是該月該類別的花費總和。請給我程式碼,並逐行解釋每個函式在做什麼。我是 pandas 初學者。

拿到答案後,用你自己的小資料跑一次,再拿計算機挑一兩格驗算。AI 給的數字對不對,最後要由你確認。

行動練習
  1. 安裝 pandas 和 openpyxl,讀進 expenses.csv。
  2. 找出所有金額大於等於 100 的花費,印出來。
  3. 依類別加總並排序,印出結果,拿計算機驗算其中一個類別。
  4. 輸出成有「明細」和「小計」兩個工作表的 Excel 檔,用 Excel 打開確認。
  5. 加分題:用 df["date"].str[:7] 新增一個「月份」欄位,再依月份加總。

讀完了嗎?

標記完成後,單元與專案的進度會自動更新(只存在這台裝置的瀏覽器)。

卡住了?讓 AI 當你的家教複製這段提問範本,貼到 Claude 或其他 AI 工具,再補上你卡住的地方。

留言與討論

卡關了、有心得,或發現內容需要更新?都歡迎留言。留言使用 GitHub 帳號登入。

留言區即將開放。現在可以先到 GitHub 討論區 發問,或看看 交流頁 的其他管道。