使用 Python 與 Pandas 進行資料轉換:完整實戰指南(ETL/ELT)
為資料工程師、分析師與機器學習實務者打造的分步驟、生產導向教學。內含可直接貼入 Notebook 的程式碼範例。
什麼是資料轉換?
資料轉換是將原始資料重塑、清理、豐富及標準化,使其適合分析、報告與機器學習的過程。實務上,轉換橋接了資料生成方式(交易、事件或日誌)與下游任務所需格式(整齊、一致且有文件記錄)之間的差距。
現代資料管線中,轉換通常涵蓋三個目標:
- 格式操作:排序、篩選、重新命名、去重、補值及重塑(寬/長)。
- 特徵工程:從現有欄位建立新欄位以供模型使用。
- 數值轉換:改變分布與尺度(對數、開方、次方、標準化、正規化)。
ETL 與 ELT:轉換所在的位置
ETL(Extract → Transform → Load)與 ELT(Extract → Load → Transform)都包含關鍵的「T」。在 ETL 中,你在載入到資料倉或服務層 之前 進行轉換;在 ELT 中,資料先載入,再在倉儲或資料湖內使用 SQL 或 Notebook 進行轉換。選擇取決於資料量、延遲、治理需求及平台優勢。
- 必須在邊界驗證與清理資料。
- 下游系統要求嚴格的 Schema。
- 在轉換層的運算成本較低。
- 倉儲/湖倉可輕鬆擴展。
- 分析師可快速使用 SQL/Notebook 迭代。
- 需要完整 lineage、版本管理與大規模重跑能力。
三大類轉換
- 格式操作:重新排序/選取列、重新命名/選取欄、去重、缺失值處理、寬↔長重塑。
- 特徵工程:衍生新欄位(如從生日計算年齡)、字串解析、分桶、合併/拆分欄位、類別編碼。
- 數值轉換:對數/開方/次方轉換、標準化、正規化及異常值處理。
專案設定與範例資料集
我們將使用 Python 與 Pandas 示範轉換。假設範例檔案 student_data.csv 含有 participant_id、name、dob、is_student、target 及季度指標 Q1..Q4 等欄位。
import pandas as pd
import numpy as np
df = pd.read_csv("student_data.csv")
df.head()
提示:建議一開始就使用 df.info()、df.describe() 以及 null 統計檢查資料,以避免後續出錯。
資料格式操作
格式操作涵蓋:列選取/過濾、欄選取/重命名、去重、缺失值補值、寬↔長格式轉換。
# 只選取特定欄位
df_subset = df[['participant_id', 'name', 'Q1']]
# 寬格式轉長格式
df_long = df.melt(id_vars=['participant_id', 'name'],
value_vars=['Q1', 'Q2', 'Q3', 'Q4'],
var_name='quarter', value_name='score')
特徵工程
可以依需求建立衍生欄位,例如年齡、分桶、文字長度、類別編碼等:
# 計算年齡
df['age'] = pd.to_datetime('2025-01-01').year - pd.to_datetime(df['dob']).dt.year
# 分桶
df['age_group'] = pd.cut(df['age'], bins=[0,18,25,40,60,100], labels=['0-18','19-25','26-40','41-60','60+'])
資料值轉換
常見方法包括標準化、正規化、對數或平方根轉換:
# 標準化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
df[['Q1','Q2','Q3','Q4']] = scaler.fit_transform(df[['Q1','Q2','Q3','Q4']])
# 正規化到 0~1
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
df[['Q1','Q2','Q3','Q4']] = scaler.fit_transform(df[['Q1','Q2','Q3','Q4']])
轉換如何驅動機器學習
適當的轉換可提升模型穩定性與效能,例如標準化、缺失值補值、類別編碼、衍生特徵。轉換策略需與模型匹配:
- 距離型模型:正規化、標準化
- 樹模型:通常不需要標準化,但缺失值與類別編碼仍需處理
- 線性模型:標準化/正則化特別重要
常見陷阱、QA 與最佳實務
- 永遠保留原始資料,轉換後建立新欄位或 DataFrame。
- 記錄轉換規則與方法,方便重現與生產化。
- 針對每個模型或下游需求檢查轉換效果。
- 避免在整個資料集上 fit scaler,應僅 fit 訓練集,並 transform 測試集。
常見問題 (FAQ)
- ETL 與 ELT 差別? → ETL 先轉換再載入;ELT 先載入再轉換。
- 何時正規化? → 適用距離敏感模型或欄位尺度差異大時。
- 如何處理遺失值? → 補值、刪除或模型預測。
- 寬格式與長格式差別? → 寬格式適合樞紐分析;長格式適合繪圖與時序分析。
結論與後續步驟
資料轉換是 ETL/ELT 中的核心環節,能直接影響下游分析、報告與模型效果。掌握格式操作、特徵工程、數值轉換,並結合生產實務,可讓資料管線穩定且易維護。
後續可進一步學習:
- 資料驗證與品質監控(Data Quality Checks)
- 自動化管線(Airflow、Prefect 或 Dagster)
- 進階特徵工程與時間序列轉換


