pandas-best-practices について
pandas でデータ操作や分析を行う開発者向けの実践ガイドです。再現可能な変換、データ検証、効率的な処理、よくある問題への対処を扱います。
主な機能
- 01DataFrame の読み込みと選択
- 02読みやすいメソッドチェーン
- 03欠損値と品質の確認
- 04グループ化と形状変換
- 05メモリーと処理速度の最適化
活用シーン
- 01データセットのクリーニングと検証
- 02テーブルの変換と集計
- 03時系列データの処理
- 04DataFrame の処理性能向上
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mindrally/ skills --skill pandas-best-practicesインストール後、Claude Code で/pandas-best-practicesを入力して読み込まれたか確認します。
詳細
Pandas のベストプラクティス
データ操作、分析、効率的な DataFrame 操作に重点を置いた、Pandas 開発のための専門的なガイドラインです。
コードのスタイルと構成
- 正確な Python の例を用いて、簡潔で技術的な回答を作成します
- データ分析のワークフローでは、再現性を優先します
- 関数型プログラミングを使用し、不要なクラスは避けます
- 明示的なループより、ベクトル化された操作を優先します
- データの内容を反映した、説明的な変数名を使用します
- PEP 8 のスタイルガイドラインに従います
DataFrame の作成と入出力
- 適切なパラメーターを指定して、
pd.read_csv()、pd.read_excel()、pd.read_json()を使用します - 読み込み時に正しいデータ型を確保するため、
dtypeパラメーターを指定します - 日時を自動的に解析するには、
parse_datesを使用します - データに自然なインデックス列がある場合は、
index_colを設定します - 大きなファイルを少しずつ読み込むには、
chunksizeを使用します
データの選択
- ラベルに基づくインデックス指定には、
.loc[]を使用します - 整数位置に基づくインデックス指定には、
.iloc[]を使用します - 連鎖インデックス指定(例:
df['col'][0])は避け、代わりに.locまたは.ilocを使用します - 条件に基づく選択には、ブールインデックス指定を使用します:
df[df['col'] > value] - 複雑なフィルター条件には、
.query()メソッドを使用します
メソッドチェーン
- 可能な場合は、データ変換にメソッドチェーンを優先します
- チェーン内でカスタム関数を適用するには、
.pipe()を使用します .assign()、.query()、.groupby()、.agg()などの操作をチェーンします- 複数行に分けて、読みやすいチェーンを保ちます
データのクリーニングと検証
欠損データ
.isna()と.info()で欠損データを確認します.fillna()、.dropna()、または補完を用いて、欠損データを適切に処理します- 欠損値を許容する整数型とブール型には、
pd.NAを使用します - 欠損データの処理方針を記録します
データ品質チェック
- 分析の開始時に、データ品質チェックを実施します
.dtypesでデータ型を検証し、必要に応じて変換します.duplicated()で重複を確認し、適切に処理します- すばやく統計的な概要を把握するには、
.describe()を使用します
型変換
- 明示的な型変換には、
.astype()を使用します - 日付の解析には、
pd.to_datetime()を使用します - 安全に数値へ変換するには、
errors='coerce'を指定してpd.to_numeric()を使用します - カーディナリティの低い文字列列には、カテゴリ型を使用します
グループ化と集計
GroupBy 操作
- 効率的な集計操作には、
.groupby()を使用します - 複数の操作を行うには、
.agg()で集計関数を指定します - 出力列名を明確にするには、名前付き集計を使用します
- 結果を元の形状にブロードキャストするには、
.transform()の使用を検討します
ピボットテーブルと形状変更
- 多次元の集計には、
.pivot_table()を使用します - 横長形式を縦長形式に変換するには、
.melt()を使用します - 縦長形式を横長形式に変換するには、
.pivot()を使用します - 階層インデックスを操作するには、
.stack()と.unstack()を使用します
パフォーマンスの最適化
メモリ効率
- カーディナリティの低い文字列には、カテゴリ型を使用します
- 適切な場合は、数値型をダウンキャストします
- 大きな式の評価には、
pd.eval()と.eval()を使用します
計算速度
- 行単位の関数を使う
.apply()より、ベクトル化された操作を使用します - カスタム関数より、組み込みの集計関数を優先します
- NumPy 操作が高速になる場合は、
.valuesまたは.to_numpy()を使用します
よくある落とし穴の回避
.iterrows()による反復は避け、ベクトル化された操作を使用します- 反復処理中に DataFrame を変更しないでください
- SettingWithCopyWarning に注意し、必要に応じて
.copy()を使用します - DataFrame を行ごとに拡張するのは避け、リストに集めて一度に作成します
時系列操作
- 時系列データには、
DatetimeIndexを使用します - 時間ベースの集計には、
.resample()を活用します - ラグ操作には、
.shift()と.diff()を使用します - ウィンドウ計算には、
.rolling()と.expanding()を使用します
マージと結合
- SQL 形式の結合には、
.merge()を使用します howパラメーターに'inner'、'outer'、'left'、'right'を指定します- 結合のカーディナリティを確認するには、
validateパラメーターを使用します - DataFrame を積み重ねるには、
.concat()を使用します
主な規約
import pandas as pdとしてインポートします- 可能な場合は、列名に
snake_caseを使用します - データソースと変換内容を記録します
- セルの実行順序を明確にし、ノートブックを再現可能な状態に保ちます
コメント
Markdown 対応