Python入門トップページ


目次

  1. Pandas とは
  2. Pandas を利用するための準備
  3. CSV ファイルを読み込む
  4. DataFrame を表示する
  5. 列や行を抽出する
  6. 列名を抽出する
  7. Python リストに変換する
  8. Python リストから DataFrame に変換する
  9. DataFrame から NumPy 配列に変換する
  10. 基本統計量を出力する
  11. CSV ファイルに書き出す
  12. グループ化とピボットテーブル
  13. データフレームの結合(系列名が等しいとき)
    1. データの読み込み
    2. データフレームの結合
    3. 3つのデータフレームの結合
    4. 表示系列の選択
    5. ソート
  14. データフレームの結合(系列名が異なるとき)
  15. データフレームの連結

Pandas

データフレームの結合(系列名が等しいとき)

ここでは複数のデータフレームの結合演算を行います.これはリレーショナルデータベースの自然結合演算に相当します.

目次に戻る

データの読み込み

はじめに,モジュールをインポートします.


# モジュールのインポート
import pandas as pd

次に,3つの CSV ファイルを順番に読み込みます.まずは,販売データである machine-sales-sales.csv ファイルを読み込み,df_sales に格納します.ここで,系列 branch_id および staff_id は外部キーになっており,他のデータフレームの主キー(候補キー)を参照していることに注意します.


# CSV ファイルを読み込む
url = "https://github.com/rinsaka/sample-data-sets/blob/master/machine-sales-sales.csv?raw=true"
df_sales = pd.read_csv(url, parse_dates=["date"])
df_sales
pandas-merge-1-01

続いて,支店一覧 machine-sales-branch.csv ファイルを読み込み,df_branch に格納します.


# CSV ファイルを読み込む
url = "https://github.com/rinsaka/sample-data-sets/blob/master/machine-sales-branch.csv?raw=true"
df_branch = pd.read_csv(url)
df_branch
pandas-merge-1-02

さらに,営業担当者の一覧 machine-sales-staff.csv ファイルを読み込み,df_staff に格納します.


# CSV ファイルを読み込む
url = "https://github.com/rinsaka/sample-data-sets/blob/master/machine-sales-staff.csv?raw=true"
df_staff = pd.read_csv(url)
df_staff
pandas-merge-1-03

ここでは,今読み込んだ3つのデータフレームを結合し,次のようなデータフレームを作成してみます.

pandas-merge-1-09

目次に戻る

データフレームの結合

merge() 関数を利用すると,2つのデータフレームを結合することができます.まず,df_salesdf_branch を結合します.このとき,どちらのデータフレームにも branch_id という系列があるので,これを手がかりに結合してくれます.


pd.merge(df_sales, df_branch)
pandas-merge-1-04

同じ方法で,df_salesdf_staff を結合します.ここでも,staff_id という系列が両データフレームに存在するので,これを手がかりに結合できます.


pd.merge(df_sales, df_staff)
pandas-merge-1-05

なお,結合したいデータフレームで系列名が異なる場合はこちらを参照してください.

目次に戻る

3つのデータフレームの結合

次は,3つのデータフレームを結合します.上と同じ方法で引数に3つのデータフレームを指定しても,結合することはできません.


pd.merge(df_sales, df_branch, df_staff)
ValueError             Traceback (most recent call last)

3つのデータフレームの結合は,まず2つのデータフレーム(df_salesdf_branch)を結合し,さらにその結果と3つ目のデータフレーム(df_staff)を結合することで実現できます.この方法が理解できれば4つ以上でも結合できるはずです.


pd.merge(
        pd.merge(df_sales, df_branch),
        df_staff
    )
pandas-merge-1-06

目次に戻る

表示系列の選択

上の結果で barnch_idstaff_id を表示する必要がないのであれば,必要な系列のみを抽出すると良いでしょう.これを関係データベースの世界では射影演算と呼びます.なお,系列の表示順も変更しています.


pd.merge(
        pd.merge(df_sales, df_branch),
        df_staff
    )[['id', 'date', 'branch', 'name', 'amount']]
pandas-merge-1-07

上で抽出した結果から新たなデータフレームを作成することももちろん可能です.


df = pd.merge(
        pd.merge(df_sales, df_branch),
        df_staff
    )[['id', 'date', 'branch', 'name', 'amount']]
df
pandas-merge-1-08

目次に戻る

ソート

上の結果では,id 列の表示順が変更されてしまっています.id 順にソートしてデータフレームを更新することも可能です.


df = df.sort_values(by=['id'], ascending=[True])
df
pandas-merge-1-09

目次に戻る