2026-04-29·Python·⏱ 約 5 分
Pandas 実務 Tips 10 選 ─ AIエンジニアの時短ワザ
データ前処理で何度も書く操作を Pandas でスマートに。groupby・apply・merge・欠損値処理など、ML エンジニアが現場でよく使うテクニックを 10 個。
Pandas は AI エンジニアが最も時間を使うライブラリ。よく使う操作を 10 個まとめました。コピペで使える形にしています。
1. groupby + agg(複数集計を一発で)
複数列に複数集計
df.groupby('category').agg(
avg_price=('price', 'mean'),
max_price=('price', 'max'),
n_items=('id', 'count'),
)2. transform(集計結果を元の行数で返す)
グループ平均との偏差を作る
df['price_z'] = (df['price'] - df.groupby('cat')['price'].transform('mean')) / df.groupby('cat')['price'].transform('std')3. 欠損値の確認と処理
欠損率と埋め方
df.isna().mean().sort_values(ascending=False)
# 数値: 中央値で埋める
df['age'] = df['age'].fillna(df['age'].median())
# カテゴリ: 最頻値
df['city'] = df['city'].fillna(df['city'].mode()[0])
# 完全に欠けてる列を削除
df = df.dropna(axis=1, how='all')4. カテゴリ変数を数値化
One-hot encoding と target encoding
# One-hot
df = pd.get_dummies(df, columns=['city', 'gender'], drop_first=True)
# Target encoding(リーク注意)
mean_target = df.groupby('city')['target'].mean()
df['city_te'] = df['city'].map(mean_target)5. 日付列の処理
datetime と特徴量化
df['date'] = pd.to_datetime(df['date'])
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['weekday'] = df['date'].dt.dayofweek
df['is_weekend'] = df['weekday'].isin([5, 6])6. merge / join 使い分け
外部結合とアシマトリック
# 内部結合(共通キーのみ)
merged = pd.merge(orders, users, on='user_id', how='inner')
# 左結合(orders を残す)
merged = pd.merge(orders, users, on='user_id', how='left')
# 結合状況を確認
merged = pd.merge(orders, users, on='user_id', how='left', indicator=True)
print(merged['_merge'].value_counts())7. メモリ削減
型のダウンキャスト
# 整数列を必要最小サイズに
df['age'] = pd.to_numeric(df['age'], downcast='integer')
# float64 を float32 に
df['price'] = df['price'].astype('float32')
# カテゴリ列を category 型に(文字列より圧倒的に省メモリ)
df['city'] = df['city'].astype('category')8. apply の代わりに vectorize
速度差は 100 倍
# 遅い: apply
df['len'] = df['text'].apply(len)
# 速い: ベクトル化(.str アクセサ)
df['len'] = df['text'].str.len()
# 数値演算も同じく
df['z'] = df['x'] * 2 + df['y'] # apply より圧倒的速い9. ピボット(縦↔横変換)
long → wide
wide = df.pivot_table(
index='user_id', columns='category', values='amount', aggfunc='sum', fill_value=0
)10. クエリ式で読みやすく
query()
# 通常
result = df[(df['age'] >= 30) & (df['city'] == 'Tokyo')]
# query 式(可読性UP)
result = df.query('age >= 30 and city == "Tokyo"')🛠 polars もチェック
1GB を超えるデータでは polars(Rust 実装の Pandas 互換)が 5〜30 倍速い。Pandas 知識はそのまま使えます。
学習リソース
- [scikit-learn 入門](/blog/sklearn-introduction)
- [Python 環境構築](/blog/python-setup-for-stats)
- [AIエンジニア統計チートシート](/blog/ai-stats-cheatsheet)
Related Articles
関連記事
- 2026-04-29Python中心極限定理を Python で動かす ─ 一様分布が正規になる瞬間統計学で最も重要な定理『中心極限定理(CLT)』を Python のシミュレーションで体感。一様分布や指数分布の標本平均が、本当に正規分布に収束する様子をヒストグラムで確認します。
- 2026-04-29PythonAIエンジニア入門 ─ Python 環境構築 完全ガイド(2026 年版)統計・機械学習を学ぶための Python 環境を、Windows / macOS で迷わず構築。uv ・ Jupyter ・ VS Code ・主要ライブラリを 30 分で揃えます。
- 2026-04-30学習法データサイエンティストのキャリア ─ 年収・職種・転職の現実データサイエンティスト・MLエンジニア・AIエンジニアの違い、年収レンジ、転職の戦略、ポートフォリオの作り方。実際の求人から見えた 2026 年の市場動向。