Python 資料分析入門:Pandas 常用操作完整教學
如果你是 Python 初學者,想踏入資料分析的世界,那 Pandas 絕對是你的第一站。我自己當初學 Python 的時候,光是用 for 迴圈處理 CSV 就搞得一個頭兩個大,直到認識了 Pandas,才真正感受到什麼叫「用對工具,事半功倍」。
這篇 Python Pandas 資料分析入門教學會帶你從零開始,一步步學會最常用的 Pandas 操作。不管你是想做數據報表、清理資料,還是為機器學習做前處理,這些技巧都是基本功。
什麼是 Pandas?為什麼資料分析一定要學它
Pandas 是 Python 生態系裡最重要的資料分析套件,沒有之一。它提供了 DataFrame 和 Series 兩種核心資料結構,讓你可以像操作 Excel 試算表一樣來處理資料,但效能和彈性完全不在同一個等級。
簡單來說,Pandas 能幫你做到這些事:
- 快速讀取 CSV、Excel、JSON、SQL 等各種格式的資料
- 靈活地篩選、排序、分組、彙總資料
- 處理缺失值、重複值等髒資料問題
- 跟 Matplotlib、Seaborn 搭配做資料視覺化
說真的,我見過太多人想跳過 Pandas 直接去學機器學習,結果連資料都讀不進來,更別說做特徵工程了。先把 Pandas 搞熟,後面的路會順很多。
安裝與匯入 Pandas
第一步當然是把 Pandas 裝起來。打開你的終端機,輸入以下指令:
pip install pandas
如果你用的是 Anaconda 環境,Pandas 通常已經內建了,不用額外安裝。安裝完成後,在 Python 腳本裡這樣匯入:
import pandas as pd
import numpy as np # Pandas 經常搭配 NumPy 使用
這裡的 pd 是業界通用的縮寫,基本上所有教學和文件都會這樣寫,建議你也養成這個習慣。
建立 DataFrame:你的第一個資料表
DataFrame 是 Pandas 的核心,你可以把它想像成一張有欄位名稱的表格。建立的方式有很多種,最常見的是用字典:
# 用字典建立 DataFrame
data = {
'姓名': ['小明', '小華', '小美', '阿豪'],
'年齡': [25, 30, 28, 35],
'城市': ['台北', '台中', '高雄', '台北'],
'薪水': [45000, 52000, 48000, 60000]
}
df = pd.DataFrame(data)
print(df)
執行後你會看到一張漂亮的表格:
姓名 年齡 城市 薪水
0 小明 25 台北 45000
1 小華 30 台中 52000
2 小美 28 高雄 48000
3 阿豪 35 台北 60000
左邊的 0、1、2、3 是索引(index),Pandas 會自動幫你加上。
讀取外部資料:CSV、Excel 一行搞定
實務上你很少會手動建立 DataFrame,大部分時候是從外部檔案讀取資料。Pandas 在這方面超級方便:
# 讀取 CSV 檔案
df = pd.read_csv('sales_data.csv')
# 讀取 Excel 檔案
df = pd.read_excel('report.xlsx', sheet_name='Sheet1')
# 讀取 JSON
df = pd.read_json('api_response.json')
# 從 SQL 資料庫讀取
import sqlite3
conn = sqlite3.connect('mydb.sqlite')
df = pd.read_sql('SELECT * FROM users', conn)
讀進來之後,通常第一件事就是用 df.head() 看前五筆資料,df.info() 看欄位資訊,df.describe() 看數值統計摘要。這三個指令我每天大概要打上百次,根本是肌肉記憶了。
資料篩選與選取:精準找到你要的東西
這大概是 Pandas 最常用也最重要的功能了。選取資料的方式主要有這幾種:
# 選取單一欄位(回傳 Series)
df['姓名']
# 選取多個欄位(回傳 DataFrame)
df[['姓名', '薪水']]
# 條件篩選:薪水大於 50000 的人
df[df['薪水'] > 50000]
# 多條件篩選:台北且薪水大於 45000
df[(df['城市'] == '台北') & (df['薪水'] > 45000)]
# 用 loc 根據標籤選取
df.loc[0:2, '姓名':'城市']
# 用 iloc 根據位置選取
df.iloc[0:2, 0:3]
這邊有個新手超常搞混的地方:loc 是用標籤(label),包含結束索引;iloc 是用整數位置(integer location),不包含結束索引,跟 Python 的 slice 規則一樣。記不住的話,就記 i = integer 就對了。
資料清理:處理缺失值與重複值
真實世界的資料一定是髒的,這點沒有例外。Pandas 提供了一整套工具來對付這些問題:
# 檢查缺失值
df.isnull().sum()
# 刪除含有缺失值的列
df.dropna()
# 用特定值填補缺失值
df['薪水'].fillna(df['薪水'].mean(), inplace=True)
# 用前一個值填補
df.fillna(method='ffill')
# 檢查重複值
df.duplicated().sum()
# 刪除重複值
df.drop_duplicates()
我個人的習慣是,拿到資料的第一件事就是跑 df.isnull().sum() 和 df.duplicated().sum()。先搞清楚資料的「健康狀況」,才決定怎麼處理。盲目地 dropna 可能會讓你損失大量有用的資料。
分組與彙總:GroupBy 的威力
GroupBy 是 Pandas 裡最強大的功能之一,概念跟 SQL 的 GROUP BY 完全相同。它讓你可以按照某個欄位分組,然後對每組進行計算:
# 按城市分組,計算平均薪水
df.groupby('城市')['薪水'].mean()
# 多種彙總計算
df.groupby('城市')['薪水'].agg(['mean', 'max', 'min', 'count'])
# 多欄位分組
df.groupby(['城市', '部門'])['薪水'].mean()
# 自訂彙總函數
df.groupby('城市').agg({
'薪水': ['mean', 'sum'],
'年齡': 'mean'
})
我覺得 GroupBy 搭配 agg() 是 Pandas 最優雅的設計之一。以前用 Excel 的樞紐分析表做的事,現在兩三行程式碼就搞定了,而且可以輕鬆處理幾百萬筆資料。
排序與排名
排序也是很基本但常用的操作:
# 按薪水由高到低排序
df.sort_values('薪水', ascending=False)
# 按多個欄位排序
df.sort_values(['城市', '薪水'], ascending=[True, False])
# 排名
df['薪水排名'] = df['薪水'].rank(ascending=False)
# 重設索引
df.reset_index(drop=True)
新增與修改欄位
在資料分析過程中,你經常需要根據現有資料計算出新的欄位:
# 直接新增欄位
df['年薪'] = df['薪水'] * 12
# 條件新增(用 np.where)
df['薪資等級'] = np.where(df['薪水'] >= 50000, '高薪', '一般')
# 用 apply 做更複雜的轉換
def classify_age(age):
if age < 25:
return '年輕'
elif age < 35:
return '中等'
else:
return '資深'
df['年齡分類'] = df['年齡'].apply(classify_age)
這裡要注意一點:apply() 雖然方便,但效能不是最好的。如果你處理的資料量很大(百萬筆以上),盡量用向量化操作(vectorized operations)來取代 apply,速度會快好幾倍。
匯出資料
分析完的資料總得存起來。Pandas 的匯出跟匯入一樣簡單:
# 存成 CSV
df.to_csv('output.csv', index=False, encoding='utf-8-sig')
# 存成 Excel
df.to_excel('output.xlsx', index=False, sheet_name='分析結果')
# 存成 JSON
df.to_json('output.json', orient='records', force_ascii=False)
特別提醒,存 CSV 的時候如果有中文,記得加上 encoding='utf-8-sig',不然用 Excel 開會變成亂碼。這個坑我踩過無數次。
實戰小技巧與建議
最後分享幾個我自己累積的經驗:
- 善用 chaining:Pandas 支援方法鏈式呼叫,可以讓你的程式碼更簡潔易讀。
- 多用 Jupyter Notebook:做資料分析的時候,Notebook 的互動式環境比純腳本方便太多了。
- 看官方文件:Pandas 的官方文件寫得非常好,遇到問題先查文件。
- 練習用真實資料:去 Kaggle 下載一些有趣的 dataset 來練手,比自己造假資料有趣多了。
學完 Pandas 基礎之後,你可以搭配其他 Python 工具來擴展你的技能。例如想自動化抓取網路資料來分析,可以參考 Python Selenium 爬蟲教學;如果想定時自動執行你的資料分析腳本,Python APScheduler 排程自動化會非常實用;而當你想把分析結果包裝成 API 服務的時候,Python FastAPI 教學是個很好的起點。
總結
Pandas 是 Python 資料分析的基石,掌握了這篇教學裡的操作,你已經可以處理大部分日常的資料分析任務了。從建立 DataFrame、讀取資料、篩選清理、分組彙總到匯出結果,這一整套流程就是資料分析的標準工作流。
不要想著一次學完所有東西,先從自己手邊的資料開始練習。遇到不會的操作就查,用多了自然就熟了。資料分析這條路,動手做永遠比光看教學有用。祝你學習順利!
你可能也喜歡
探索其他領域的精選好文