dotConf, Inc
🚀

Pandasだけでここまでできる:実務で使う15の処理レシピ

はじめまして、
株式会社dotConfにて、AIエンジニアをしている古菅(こすげ)です!
この度、会社としてZennでの発信をスタートすることになりました。

私たちは、「テクノロジーを民主化する。」というミッションのもと、AIソリューション事業とAI教育事業を行っている会社です。

Pandasだけでここまでできる:実務で使う15の処理レシピ

1. Pandasとは?

PandasはPythonの代表的なデータ分析ライブラリです。
Excelのように表形式のデータを扱えるだけでなく、より効率的・柔軟に処理できるのが特徴です。

しかし実務ではこんな悩みをよく耳にします👇

そこで本記事では、実務でよく使うPandasの処理を15個、コピペでそのまま使える「レシピ集」として整理しました。

2. なぜ処理レシピが重要なのか

データ分析の現場では「一度やったけど忘れてしまう処理」が山ほどあります。
とくにPandasは書き方が独特なため、調べる時間が増えてしまいがちです。

本記事では以下の2ステップで整理しています👇

  • 【基本編】毎日使う定番処理(8選)
  • 【実践編】業務でよくある処理(7選)

「今すぐ使いたい処理」を見つけやすいように構成しています。

3. Pandasでよく出会う3つの課題

Pandasを使っていると、以下のポイントでつまずきやすいです👇

  1. データの読み込み
     → 文字化け・型の誤認識がよく起こる

  2. 前処理(欠損・重複・条件分岐)
     → どうやって一括処理するのか分からない

  3. 加工・集計
     → groupbyやsortの書き方が覚えにくい

環境準備

import pandas as pd
import numpy as np

# バージョン確認
print(f"pandas version: {pd.__version__}")

【基本編】 毎日使う定番処理(8選)

1. データフレームの生成

  • データ分析に必要な元となるデータフレームを準備します。
import pandas as pd

# サンプルデータ
data = {"name": ["A", "B", "C"], "score": [80, 90, 70]}
df = pd.DataFrame(data)

2. CSVの文字化けを防ぐ読み込み

  • 日本語を含むCSVファイルでよくある文字化け問題を解決します。
# Shift-JISのファイルを読み込む
df = pd.read_csv('data.csv', encoding='shift-jis')

# UTF-8 with BOMの場合
df = pd.read_csv('data.csv', encoding='utf-8-sig')

# エンコーディングが不明な場合は自動検出
import chardet
with open('data.csv', 'rb') as f:
    result = chardet.detect(f.read())
df = pd.read_csv('data.csv', encoding=result['encoding'])

3. データの確認

  • 作成または読み込んだデータの様々な情報を確認することができます。
print(df.shape) # (行数, 列数)
print(df.head()) # 先頭5行
print(df.tail()) # 末尾5行
print(df.sample()) # ランダム1行
print(df.dtypes) # データの型確認
print(df.info()) # データフレームのサマリー情報

4. 欠損値を含む列の処理

  • データに欠損がある場合、欠損値を削除したり、補完することができます。
# サンプルデータ
df = pd.DataFrame({
    'A': [1, 2, None, 4],
    'B': [5, None, None, 8],
    'C': [9, 10, 11, 12]
})

# 欠損値の確認
print(df.isnull().sum())

# 欠損値が50%以上の列を削除
threshold = len(df) * 0.5
df_cleaned = df.dropna(thresh=threshold, axis=1)

# 前の値で補完(時系列データに有効)
df_filled = df.fillna(method='ffill')

5. データ選択・抽出

  • 特定の列や行を取り出したり、条件を満たすデータだけを抽出することができます。
# サンプルデータ
df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [24, 27, 22, 32, 29],
    'Score': [85, 90, 70, 88, 95]
})

# 特定の列を選択
print(df['Name'])        # 単一列
print(df[['Name','Age']]) # 複数列

# インデックス番号で行を抽出
print(df.iloc[0])   # 0行目
print(df.iloc[1:3]) # 1〜2行目(スライス)

# ラベルで行を抽出
print(df.loc[0])           # インデックス0の行
print(df.loc[0:2, ['Name','Score']]) # 0〜2行目、NameとScore列

# 条件で抽出
print(df[df['Age'] > 25])         # Ageが25より大きい行
print(df[(df['Age'] > 25) & (df['Score'] >= 90)]) # 複数条件

6. データ加工

  • データフレームから新しいカラムを追加したり、削除、カラム名の変更等が可能です。
# サンプルデータ
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David'],
    'age': [24, 27, 22, 32],
    'city': ['Tokyo', 'Osaka', 'Nagoya', 'Fukuoka']
})
print(df)

# 11. カラム追加
df['age_plus_10'] = df['age'] + 10
print(df)

# 12. カラム削除
df = df.drop(columns=['city'])
print(df)

# 13. カラム名変更
df = df.rename(columns={'name': 'Name', 'age': 'Age'})
print(df)

# 14. カラムごとの関数適用
df['Age_squared'] = df['Age'].apply(lambda x: x**2)
print(df)

# 追加例: 条件による新しい列
df['is_adult'] = np.where(df['Age'] >= 20, True, False)
print(df)

7. データ集計・整形

  • データを並べ替えたり、グループごとに集計したり、一意な値を確認するなど、データの要約や整形が可能です。
# サンプルデータ
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [24, 27, 22, 32, 29],
    'city': ['Tokyo', 'Osaka', 'Tokyo', 'Fukuoka', 'Osaka'],
    'score': [85, 90, 70, 88, 95]
})

# グループ集計
# city ごとの平均年齢
print(df.groupby('city')['age'].mean())

# 行方向の集計
# 各行の合計
print(df.sum(axis=1))

# ピボット集計
# city × age の平均スコア
pivot = df.pivot_table(
    values='score',      # 集計対象
    index='city',        # 行方向
    columns='age',       # 列方向
    aggfunc='mean',      # 集計関数
    fill_value=0         # 欠損値を0で補完
)
print(pivot)

8. データのエクスポート

  • 作成・加工したデータをCSVやExcelなどの外部ファイルに保存することで、共有や再利用が容易になります。
# サンプルデータ
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie'],
    'score': [85, 92, 78]
})

# CSVファイルに出力
df.to_csv('output.csv', index=False, encoding='utf-8')

# Excelファイルに出力
df.to_excel('output.xlsx', index=False)

# JSON形式で出力
df.to_json('output.json', orient='records', force_ascii=False)

【実践編】 業務でよく使うパターン(7選)

9. データのソートと並び替え

  • データを昇順・降順に並べ替えることで、上位・下位のデータを簡単に確認できます。
  • 実務では「売上が多い順」「年齢が若い順」などのランキングを出すときによく使います。
# サンプルデータ
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [24, 27, 22, 32, 29],
    'score': [85, 90, 70, 88, 95]
})
print(df)

# 年齢で昇順にソート(若い順)
print(df.sort_values(by='age'))

# スコアで降順にソート(高い順)
print(df.sort_values(by='score', ascending=False))

# 複数列でソート(スコア降順 → 年齢昇順)
print(df.sort_values(by=['score', 'age'], ascending=[False, True]))

10. 複数のDataFrameを効率的に結合

  • 異なるデータフレームの情報を一括で扱いたい場合などに有効です。
# 顧客マスタ
customers = pd.DataFrame({
    'customer_id': [1, 2, 3],
    'name': ['田中', '鈴木', '佐藤']
})

# 注文データ
orders = pd.DataFrame({
    'order_id': [101, 102, 103],
    'customer_id': [1, 2, 1],
    'amount': [10000, 15000, 8000]
})

# 内部結合
result = pd.merge(orders, customers, on='customer_id', how='left')

# 複数キーでの結合
df1 = pd.DataFrame({
    'year': [2024, 2024, 2023],
    'month': [1, 2, 12],
    'value': [100, 200, 300]
})

df2 = pd.DataFrame({
    'year': [2024, 2024],
    'month': [1, 2],
    'target': [150, 180]
})

merged = pd.merge(df1, df2, on=['year', 'month'], how='left')

11. カテゴリ変数のエンコーディング

  • 文字列データを数値やダミー変数に変換することで、機械学習モデルや集計処理で扱いやすくなります。
# サンプルデータ
df = pd.DataFrame({
    'city': ['東京', '大阪', '東京', '名古屋', '大阪'],
    'grade': ['A', 'B', 'A', 'C', 'B']
})

# ラベルエンコーディング
df['city_code'] = pd.Categorical(df['city']).codes

# One-Hotエンコーディング
one_hot = pd.get_dummies(df['grade'], prefix='grade')
df = pd.concat([df, one_hot], axis=1)

# 順序付きカテゴリ
df['grade_cat'] = pd.Categorical(
    df['grade'], 
    categories=['C', 'B', 'A'], 
    ordered=True
)

12. 時系列データの処理

  • 日付や時刻を適切に扱うことで、リサンプリング・移動平均・トレンド分析などが可能になります。
# サンプルデータ
date_rng = pd.date_range(start='2024-01-01', end='2024-01-10', freq='D')
df = pd.DataFrame({
    'date': date_rng,
    'sales': [100, 120, 90, 150, 130, 170, 200, 180, 160, 190]
})

# 日付をインデックスに設定
df = df.set_index('date')

# 月単位にリサンプリング(合計)
monthly = df.resample('M').sum()

# 移動平均(3日間)
df['rolling_mean'] = df['sales'].rolling(window=3).mean()

# 期間フィルタリング(2024-01-05以降)
filtered = df.loc['2024-01-05':]

13. 欠損値の高度な処理

  • データ分析や機械学習の前処理として、欠損値を適切に補完・除去することで精度を高めることができます。
# サンプルデータ
df = pd.DataFrame({
    'age': [25, np.nan, 30, 28, np.nan],
    'score': [85, 90, np.nan, 70, 95],
    'city': ['東京', '大阪', '東京', None, '名古屋']
})

# 欠損値の確認
df.isnull().sum()

# 平均値で補完
df['age_fill_mean'] = df['age'].fillna(df['age'].mean())

# 特定の値で補完
df['city_fill'] = df['city'].fillna('不明')

# 複数条件で補完(例:列ごとの中央値)
df = df.apply(lambda col: col.fillna(col.median()) if col.dtype != 'object' else col)

14. データの可視化

  • Pandasのplotメソッドを使うことで、データの傾向や分布を手軽に確認できます。
  • Matplotlibを内部的に利用しており、折れ線・棒グラフ・ヒストグラムなど様々な可視化が可能です。
import matplotlib.pyplot as plt

# サンプルデータ
df = pd.DataFrame({
    'month': ['1月', '2月', '3月', '4月', '5月'],
    'sales': [100, 120, 90, 150, 200],
    'profit': [20, 25, 15, 40, 60]
})

# 折れ線グラフ
df.plot(x='month', y='sales', kind='line', marker='o', title='売上推移')
plt.show()

# 棒グラフ
df.plot(x='month', y=['sales', 'profit'], kind='bar', title='売上と利益の比較')
plt.show()

# ヒストグラム
df['sales'].plot(kind='hist', bins=5, title='売上分布', alpha=0.7)
plt.show()

15. データの自動プロファイリング(pandas-profiling)

  • データの基本統計量や分布、相関関係を自動でレポート化してくれる便利ツール
  • 探索的データ分析(EDA)の初期段階で、データの全体像を素早く把握できます。
# インストール(必要に応じて)
# pip install ydata-profiling

import pandas as pd
from ydata_profiling import ProfileReport

# サンプルデータ
df = pd.DataFrame({
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'age': [24, 27, 22, 32, 29],
    'city': ['Tokyo', 'Osaka', 'Tokyo', 'Fukuoka', 'Osaka'],
    'score': [85, 90, 70, 88, 95]
})

# プロファイルレポートの生成
profile = ProfileReport(df, title="Pandas Profiling Report", explorative=True)

# HTMLとして出力
profile.to_file("report.html")

# Jupyter Notebook上で直接表示する場合
profile.to_notebook_iframe()

まとめ

本記事では、Pandasを使った実務でよく使う15の処理レシピを紹介しました。基本的な処理から応用的なテクニックまで、幅広くカバーしています。

重要なポイント

  • データの基礎操作
    DataFrame の生成・確認・加工・抽出など、データ分析の前提となる操作は必ず押さえておく。

  • 欠損値と整形処理
    欠損値の単純補完から列ごとの条件付き処理まで、多様な方法を使い分ける。
    並び替えや集計、結合・マージを駆使することで、分析に適した形に整えられる。

  • カテゴリ・時系列データの扱い
    カテゴリ変数のエンコーディングは機械学習前処理で必須。
    時系列データはリサンプリングや移動平均を活用して傾向を読み取る。

  • 集計と可視化
    groupbypivot_table による柔軟な集計で、ビジネスに即した指標を取り出せる。
    plot を使えば、数行のコードで売上推移や分布などをグラフ化できる。

  • データの入出力
    CSV・Excel・JSONなど形式に応じて適切に保存・共有することで、実務での再利用性が高まる。


👉 これらのレシピを組み合わせれば、データの「読み込み → 整形 → 分析 → 可視化 → 出力」まで一連の流れを Pandasだけで完結 できます。
実務でも研究でも強力な武器になりますので、ぜひ自分のプロジェクトに当てはめて活用してみてください。

参考リンク

最後に

最後まで読んでくださり、ありがとうございました!
この記事が少しでも皆さんの学びや気づきにつながれば嬉しいです ✨
ぜひ「いいね」と共有をお願いします!🚀

📬 仕事の相談はこちら 📬

お仕事のご相談やご依頼は、下記のフォームよりお気軽にお問い合わせください。
👉 お問い合わせフォーム

メールでのご連絡をご希望の方は、こちらまでお願いいたします。
📧 info@dotconf.co.jp

お知らせ

私たちは AI学習サービス「aipass」 も運営しています。
実践的なAIプログラミング学習や副業案件獲得支援をお届けしていますので、ぜひこちらもご覧ください!

dotConf, Inc
dotConf, Inc

Discussion