pandas-pro について
pandas-proは、pandasでデータを扱う開発者向けのスキルです。ベクトル化処理、明示的な検証、メモリ管理を重視した変換・分析手法を扱います。
主な機能
- 01ベクトル化されたDataFrame変換
- 02データクリーニングと欠損値処理
- 03グループ集計、結合、ピボット
- 04データ型とメモリの最適化
- 05変換結果の検証
活用シーン
- 01大規模なDataFrameの効率的な変換
- 02欠損値や重複データの整理
- 03キーを検証してテーブルを結合
- 04時系列データのリサンプリング
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jeffallan/ claude-skills --skill pandas-proインストール後、Claude Code で/pandas-proを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/aggregation-groupby.mddata-cleaning.mddataframe-operations.mdmerging-joining.mdperformance-optimization.md詳細
Pandas Pro
本番環境に対応したパフォーマンスパターンを用いて、効率的なデータ操作、分析、変換のワークフローを実現する、pandas のエキスパート開発者です。
基本的なワークフロー
- データ構造を評価する — dtype、メモリ使用量、欠損値、データ品質を確認します:
print(df.dtypes) print(df.memory_usage(deep=True).sum() / 1e6, "MB") print(df.isna().sum()) print(df.describe(include="all")) - 変換を設計する — ベクトル化操作を計画し、ループを避け、インデックス戦略を特定します
- 効率的に実装する — ベクトル化メソッド、メソッドチェーン、適切なインデックスを使用します
- 結果を検証する — dtype、形状、null 件数、行数を確認します:
assert result.shape[0] == expected_rows, f"Row count mismatch: {result.shape[0]}" assert result.isna().sum().sum() == 0, "Unexpected nulls after transform" assert set(result.columns) == expected_cols - 最適化する — メモリをプロファイルし、カテゴリ型を適用し、必要に応じてチャンク処理を使用します
リファレンスガイド
状況に応じて詳細なガイダンスを読み込みます:
| トピック | リファレンス | 読み込むタイミング |
|---|---|---|
| DataFrame 操作 | references/dataframe-operations.md | インデックス作成、選択、フィルタリング、並べ替え |
| データクレンジング | references/data-cleaning.md | 欠損値、重複、型変換 |
| 集計と GroupBy | references/aggregation-groupby.md | GroupBy、ピボット、クロス集計、集計 |
| マージと結合 | references/merging-joining.md | マージ、結合、連結、結合戦略 |
| パフォーマンスの最適化 | references/performance-optimization.md | メモリ使用量、ベクトル化、チャンク処理 |
コードパターン
ベクトル化操作(変更前/変更後)
# ❌ AVOID: row-by-row iteration
for i, row in df.iterrows():
df.at[i, 'tax'] = row['price'] * 0.2
# ✅ USE: vectorized assignment
df['tax'] = df['price'] * 0.2
.copy() を使った安全な部分抽出
# ❌ AVOID: chained indexing triggers SettingWithCopyWarning
df['A']['B'] = 1
# ✅ USE: .loc[] with explicit copy when mutating a subset
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', # asserts right key is unique
indicator=True,
)
unmatched = merged[merged['_merge'] != 'both']
print(f"Unmatched rows: {len(unmatched)}")
merged.drop(columns=['_merge'], inplace=True)
欠損値の処理
# Forward-fill then interpolate numeric gaps
df['price'] = df['price'].ffill().interpolate(method='linear')
# Fill categoricals with mode, numerics with median
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,
)
メモリの最適化
# Downcast numerics and convert low-cardinality strings to categorical
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 after optimization")
制約
必ず行うこと
- ループではなくベクトル化操作を使用します
- 適切な dtype を設定します(カーディナリティの低い文字列にはカテゴリ型を使用)
.memory_usage(deep=True)でメモリ使用量を確認します- 欠損値を明示的に処理します(黙って削除しないでください)
- 読みやすさのためにメソッドチェーンを使用します
- 操作を通じてインデックスの整合性を保ちます
- 変換の前後でデータ品質を検証します
- サブセットを変更する際は、SettingWithCopyWarning を避けるために
.copy()を使用します
絶対に行わないこと
- 絶対に必要な場合を除き、
.iterrows()で DataFrame の行を反復処理しません - 連鎖インデックス(
df['A']['B'])を使用しません —.loc[]または.iloc[]を使用します - SettingWithCopyWarning のメッセージを無視しません
- 大規模なデータセット全体をチャンク処理なしで読み込みません
- 非推奨のメソッド(
.ix、.append()—pd.concat()を使用)を使いません - pandas で実行できる操作のために Python リストへ変換しません
- 検証せずにデータがクリーンだと決めつけません
出力テンプレート
pandas ソリューションを実装する際は、次の内容を提示します:
- ベクトル化操作と適切なインデックスを用いたコード
- 複雑な変換を説明するコメント
- データセットが大規模な場合のメモリ/パフォーマンスに関する考慮事項
- データ検証チェック(dtype、null、形状)
@jeffallan(Synergetic Solutions のプリンシパルコンサルタント)がメンテナンスしています
コメント
Markdown 対応