用 pandas 整理表格
用 pandas 讀進 CSV 和 Excel,幾行程式就能篩選、分組加總,再輸出成有多個工作表的 Excel 檔。
為什麼不直接用 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月")
讀進來、處理、寫出去。原始檔案從頭到尾都沒被改到。
篩選:只看你要的列
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 最能幫上忙的地方:你描述想要的結果,它告訴你用哪個函式。
我有一個 pandas DataFrame,欄位是 date(文字,格式像 2026-11-03)、category、item、amount。我想做一張表:每一列是一個月份,每一欄是一個類別,格子裡是該月該類別的花費總和。請給我程式碼,並逐行解釋每個函式在做什麼。我是 pandas 初學者。
拿到答案後,用你自己的小資料跑一次,再拿計算機挑一兩格驗算。AI 給的數字對不對,最後要由你確認。
- 安裝 pandas 和 openpyxl,讀進
expenses.csv。 - 找出所有金額大於等於 100 的花費,印出來。
- 依類別加總並排序,印出結果,拿計算機驗算其中一個類別。
- 輸出成有「明細」和「小計」兩個工作表的 Excel 檔,用 Excel 打開確認。
- 加分題:用
df["date"].str[:7]新增一個「月份」欄位,再依月份加總。
讀完了嗎?
標記完成後,單元與專案的進度會自動更新(只存在這台裝置的瀏覽器)。
留言與討論
卡關了、有心得,或發現內容需要更新?都歡迎留言。留言使用 GitHub 帳號登入。