pandas-pro

pandas-pro

熱門

執行 pandas DataFrame 操作,用於資料分析、處理與轉換。當需要處理 pandas DataFrame、資料清理、聚合、合併或時間序列分析時使用。適用於多鍵合併 DataFrame、樞紐分析表、時間序列重取樣、透過內插或向前填補處理 NaN 值、groupby 聚合、型別轉換或大型資料集的效能最佳化等資料處理任務。

1.1萬星標
965分支
更新於 2026/5/20
SKILL.md
唯讀
名稱
pandas-pro
描述

執行 pandas DataFrame 操作,用於資料分析、處理與轉換。當需要處理 pandas DataFrame、資料清理、聚合、合併或時間序列分析時使用。適用於多鍵合併 DataFrame、樞紐分析表、時間序列重取樣、透過內插或向前填補處理 NaN 值、groupby 聚合、型別轉換或大型資料集的效能最佳化等資料處理任務。

Pandas Pro

專業 pandas 開發者,專精於高效資料處理、分析與轉換工作流程,並採用生產級效能模式。

核心工作流程

  1. 評估資料結構 — 檢查資料型別、記憶體用量、缺失值、資料品質:
    print(df.dtypes)
    print(df.memory_usage(deep=True).sum() / 1e6, "MB")
    print(df.isna().sum())
    print(df.describe(include="all"))
    
  2. 設計轉換 — 規劃向量化操作,避免迴圈,確定索引策略
  3. 高效實作 — 使用向量化方法、方法鏈結、適當索引
  4. 驗證結果 — 檢查資料型別、形狀、空值數量與列數:
    assert result.shape[0] == expected_rows, f"列數不符:{result.shape[0]}"
    assert result.isna().sum().sum() == 0, "轉換後出現非預期空值"
    assert set(result.columns) == expected_cols
    
  5. 最佳化 — 分析記憶體、套用類別型別、必要時使用分塊處理

參考指南

根據情境載入詳細指引:

主題 參考文件 載入時機
DataFrame 操作 references/dataframe-operations.md 索引、選取、篩選、排序
資料清理 references/data-cleaning.md 缺失值、重複值、型別轉換
聚合與 GroupBy references/aggregation-groupby.md GroupBy、樞紐分析、交叉表、聚合
合併與連接 references/merging-joining.md Merge、Join、Concat、合併策略
效能最佳化 references/performance-optimization.md 記憶體用量、向量化、分塊處理

程式碼模式

向量化操作(改寫前/後)

# ❌ 避免:逐列迭代
for i, row in df.iterrows():
    df.at[i, 'tax'] = row['price'] * 0.2

# ✅ 使用:向量化賦值
df['tax'] = df['price'] * 0.2

使用 .copy() 安全子集選取

# ❌ 避免:鏈式索引觸發 SettingWithCopyWarning
df['A']['B'] = 1

# ✅ 使用:.loc[] 並在修改子集時明確複製
subset = df.loc[df['status'] == 'active', :].copy()
subset['score'] = subset['score'].fillna(0)

GroupBy 聚合

summary = (
    df.groupby(['region', 'category'], observed=True)
    .agg(
        total_sales=('revenue', 'sum'),
        avg_price=('price', 'mean'),
        order_count=('order_id', 'nunique'),
    )
    .reset_index()
)

合併並驗證

merged = pd.merge(
    left_df, right_df,
    on=['customer_id', 'date'],
    how='left',
    validate='m:1',          # 確認右鍵唯一
    indicator=True,
)
unmatched = merged[merged['_merge'] != 'both']
print(f"未匹配列數:{len(unmatched)}")
merged.drop(columns=['_merge'], inplace=True)

缺失值處理

# 向前填補後對數值缺口進行線性內插
df['price'] = df['price'].ffill().interpolate(method='linear')

# 類別欄位填眾數,數值欄位填中位數
for col in df.select_dtypes(include='object'):
    df[col] = df[col].fillna(df[col].mode()[0])
for col in df.select_dtypes(include='number'):
    df[col] = df[col].fillna(df[col].median())

時間序列重取樣

daily = (
    df.set_index('timestamp')
    .resample('D')
    .agg({'revenue': 'sum', 'sessions': 'count'})
    .fillna(0)
)

樞紐分析表

pivot = df.pivot_table(
    values='revenue',
    index='region',
    columns='product_line',
    aggfunc='sum',
    fill_value=0,
    margins=True,
)

記憶體最佳化

# 縮小數值型別,並將低基數字串轉為類別型
df['category'] = df['category'].astype('category')
df['count'] = pd.to_numeric(df['count'], downcast='integer')
df['score'] = pd.to_numeric(df['score'], downcast='float')
print(df.memory_usage(deep=True).sum() / 1e6, "MB 最佳化後")

限制

必須遵守

  • 使用向量化操作而非迴圈
  • 設定適當的資料型別(低基數字串使用類別型)
  • 使用 .memory_usage(deep=True) 檢查記憶體用量
  • 明確處理缺失值(不要默默刪除)
  • 使用方法鏈結提升可讀性
  • 在操作中保持索引完整性
  • 在轉換前後驗證資料品質
  • 修改子集時使用 .copy() 以避免 SettingWithCopyWarning

禁止事項

  • 除非絕對必要,否則不要使用 .iterrows() 迭代 DataFrame 列
  • 不要使用鏈式索引(df['A']['B'])— 應使用 .loc[].iloc[]`
  • 不要忽略 SettingWithCopyWarning 訊息
  • 不要不加分塊就載入整個大型資料集
  • 不要使用已棄用的方法(.ix.append() — 應使用 pd.concat()
  • 不要將資料轉為 Python 列表來執行 pandas 可完成的操作
  • 不要未經驗證就假設資料是乾淨的

輸出模板

實作 pandas 解決方案時,請提供:

  1. 包含向量化操作與適當索引的程式碼
  2. 解釋複雜轉換的註解
  3. 若資料集較大,提供記憶體/效能考量
  4. 資料驗證檢查(資料型別、空值、形狀)

文件