Pandas

データ処理・分析 | IT用語集

この用語をシェア

概要

Pandasは、Pythonで最も重要なデータ分析・操作ライブラリです。NumPy上に構築されており、構造化データ(表形式データ)を効率的に扱うためのDataFrameとSeriesという2つの主要なデータ構造を提供します。データの読み込み、クリーニング、変換、統合、分析における標準的なツールとして、データサイエンス、機械学習、ビジネス分析の分野で幅広く利用されています。

主要なデータ構造

DataFrame

DataFrameは2次元のラベル付きデータ構造で、異なるデータ型(数値、文字列、日付など)の列を持つことができます。ExcelやSQLテーブルのような表形式データを扱うための中心的な概念です。

  • 行と列のラベル:インデックス(行)とカラム(列)によるデータの識別
  • 異種データ型対応:同一DataFrame内で異なるデータ型を扱える
  • 欠損値処理:NaN値の自動処理と様々な補完機能
  • 柔軟なサイズ変更:行・列の動的な追加・削除

Series

Seriesは1次元のラベル付き配列で、任意のデータ型を格納できます。DataFrameの単一列や行の基本構造でもあります。

  • インデックスラベル:各要素を識別するラベル
  • NumPy互換性:NumPy配列との相互運用性
  • ベクトル化操作:効率的な要素ごとの計算

主要機能と特徴

データ入出力(I/O)

  • CSV、Excel、JSON:一般的なファイル形式への読み書き
  • データベース連携:SQL直接実行、各種DBへの接続
  • Web API連携:HTML、XML、Webスクレイピング機能
  • 統計ソフト形式:SPSS、SAS、Stataファイルの読み込み

データクリーニング・前処理

  • 欠損値処理:検出、削除、補完(平均値、中央値、前後値など)
  • 重複データ処理:重複行の検出・削除
  • データ型変換:自動・手動でのデータ型最適化
  • 異常値検出:統計的手法による外れ値の特定

データ変換・操作

  • フィルタリング・ソート:複雑な条件による data selection
  • グルーピング・集約:GROUP BY風の操作と統計値計算
  • ピボットテーブル:多次元データの要約・可視化
  • 結合・マージ:複数のDataFrame合成(内部・外部・左右結合)

実用的なコード例

基本的なデータ操作

import pandas as pd
import numpy as np

# DataFrameの作成
df = pd.DataFrame({
    'name': ['太郎', '花子', '次郎', '美咲'],
    'age': [25, 30, 35, 28],
    'salary': [400000, 550000, 650000, 480000],
    'department': ['営業', 'IT', '営業', 'IT']
})

# データの基本情報確認
print(df.info())
print(df.describe())

# 条件フィルタリング
it_employees = df[df['department'] == 'IT']
high_salary = df[df['salary'] > 500000]

# 新しい列の追加
df['salary_category'] = df['salary'].apply(
    lambda x: 'high' if x > 500000 else 'low'
)

# グルーピングと集約
dept_stats = df.groupby('department').agg({
    'salary': ['mean', 'max', 'min'],
    'age': 'mean'
})

データクリーニング例

# 欠損値を含むデータの処理
sales_data = pd.DataFrame({
    'date': ['2024-01-01', '2024-01-02', '2024-01-03'],
    'product': ['A', 'B', None],
    'sales': [1000, None, 1500],
    'region': ['東京', '大阪', '名古屋']
})

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

# 欠損値の処理
# 1. 欠損値を含む行を削除
clean_data = sales_data.dropna()

# 2. 欠損値を特定の値で埋める
filled_data = sales_data.fillna({
    'product': 'Unknown',
    'sales': sales_data['sales'].mean()
})

# 3. 前後の値で補間
interpolated_data = sales_data.interpolate()

# 重複行の処理
df_with_duplicates = pd.concat([sales_data, sales_data])
unique_data = df_with_duplicates.drop_duplicates()

時系列データ分析

# 時系列データの作成と操作
dates = pd.date_range('2024-01-01', periods=100, freq='D')
ts_data = pd.DataFrame({
    'date': dates,
    'value': np.random.randn(100).cumsum() + 100
})

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

# 期間別の統計
monthly_stats = ts_data.resample('M').agg(['mean', 'std', 'max', 'min'])

# 移動平均の計算
ts_data['ma_7'] = ts_data['value'].rolling(window=7).mean()
ts_data['ma_30'] = ts_data['value'].rolling(window=30).mean()

# 期間フィルタリング
jan_data = ts_data['2024-01']
recent_data = ts_data.last('30D')

他ライブラリとの連携

NumPy連携

  • 基盤技術:PandasはNumPy配列をベースに構築
  • 高性能計算:NumPyの最適化された計算エンジンを活用
  • シームレス変換:DataFrame ↔ NumPy配列の相互変換

機械学習ライブラリとの統合

  • scikit-learn:前処理パイプライン、特徴量エンジニアリング
  • TensorFlow/PyTorch:モデル学習用データの準備
  • XGBoost/LightGBM:勾配ブースティングでの前処理

可視化ライブラリ

  • Matplotlib:基本的なプロット機能の内蔵
  • Seaborn:統計的可視化との親和性
  • Plotly:インタラクティブ可視化

実用的な活用場面

  • ビジネス分析:売上データ、顧客行動分析、KPI分析
  • 金融データ分析:株価分析、リスク評価、ポートフォリオ管理
  • マーケティング:A/Bテスト、セグメンテーション、コンバージョン分析
  • IoT・センサーデータ:時系列データの前処理と異常検知
  • 学術研究:実験データ分析、統計処理
  • 機械学習前処理:特徴量エンジニアリング、データ準備

メリット・デメリット

メリット

  • 直感的で読みやすいAPI
  • 豊富なデータ入出力機能
  • 強力なデータクリーニング機能
  • 充実した統計・集約機能
  • 大規模なコミュニティとドキュメント
  • 他ライブラリとの優れた連携性

デメリット

  • 大容量データでのメモリ使用量
  • 複雑な操作での処理速度
  • 学習コストの高い高度な機能
  • バージョン間での機能変更

最新バージョン情報

Pandas 2.x系では、以下のような重要なアップデートが行われています:

  • PyArrowバックエンド:より高速なデータ処理とメモリ効率の改善
  • Copy-on-Writeメモリ管理:メモリ使用量の最適化
  • タイプヒント対応:静的型チェックとIDE支援の向上
  • 新しいString型:文字列処理の高速化
  • 改善されたGroupBy機能:より柔軟な集約操作

関連Webサイト

この用語についてもっと詳しく

Pandasに関するご質問や、システム導入のご相談など、お気軽にお問い合わせください。