【初心者向け】Pandasデータ結合入門 merge、join、concat の違いを解説!

はじめに

Pandasを使ってデータ分析をする際に避けて通れないのが、データセットの結合です。
ただ、Pandasにはデータ結合のためのメソッドとして、mergejoinconcatの3つのメソッドが提供されています。Pandasを学び始めたばかりの初学者の方ですと、これらのどれを使えば良いのか、使い分けがわからないという問題に直面することがあります。そのため本記事では、これらのメソッドの違いと、どのような時に使うべきかを初学者向けに解説します。

merge

mergeメソッドはSQLの結合操作に非常に似ており、主に異なるデータフレーム間で共通の列またはインデックスを基にデータを結合します。最も一般的な使い方は、共通の”キー”列を指定して2つのデータフレームを結合することです。mergeは、内部結合、左結合、右結合、外部結合など、複数の結合方法をサポートしています。

mergeのサンプルプログラム

import pandas as pd

# データフレームを作成
df1 = pd.DataFrame({'ID': [1, 2, 3, 4],
                    '製品': ['A', 'B', 'C', 'D']})
df2 = pd.DataFrame({'ID': [2, 3, 4, 5],
                    '価格': [300, 150, 600, 50]})

# ID列をキーとしてmergeを使用
merge_result = pd.merge(df1, df2, on='ID')
merge_result

join

joinメソッドは、主にインデックスを基にデータフレームを結合します。mergeと同様に、様々な結合方法をサポートしていますが、joinはデフォルトでインデックスを結合キーとして使用し、列を指定することも可能です。このメソッドは、特にインデックスベースでのデータ結合を行いたい場合に便利です。

joinのサンプルプログラム

import pandas as pd

# インデックスを使用してデータフレームを結合
df1 = pd.DataFrame({'製品': ['A', 'B', 'C', 'D']},
                   index=[1, 2, 3, 4])
df2 = pd.DataFrame({'価格': [300, 150, 600, 50]},
                   index=[2, 3, 4, 5])

# df1にdf2をjoin
join_result = df1.join(df2, how='inner')
join_result

concat

concatメソッドは、軸を指定してシンプルにデータフレームやシリーズを結合します。主に、同じ構造のデータを縦(行方向)または横(列方向)に連結したい場合に使用されます。ただし、concatは、細かな結合処理に適していません。 以下はサンプルプログラムです。

concatのサンプルプログラム

import pandas as pd

df1 = pd.DataFrame({'製品': ['A', 'B'],
                    '価格': [100, 200]})
df2 = pd.DataFrame({'製品': ['C', 'D'],
                    '価格': [300, 400]})

# concatを使用
concat_result = pd.concat([df1, df2], axis=0)  # 縦(行)方向 に連結
concat_result

concatの引数axisについて

concatの引数axisですが、結合する方向を指定します。デフォルトで初期値0が渡されます。0もしくは1を明示的に指定でき、デフォルト0では縦方向に連結します。

縦(行)方向はデータフレームの下にくっつけるイメージで、横(列方向)は右にくっつけるイメージです。以下に詳細に説明します。

縦方向 (axis=0)と横方向 (axis=1)の違いとイメージ

縦(行)方向 (axis=0)
ここで言う「縦方向」は、データフレームに新しい行を追加する操作を指します。すなわち、複数のデータフレームを上から下へ(縦に)連結します。これにより、データフレームの行数が増えますが、列数は増えません(列名が同じ場合)。この操作は、同じ種類のデータを時間軸などで続けて並べたい場合によく使われます。

横(列)方向 (axis=1)
一方で「横方向」とは、データフレームに新しい列を追加する操作を指します。つまり、複数のデータフレームを左から右へ(横に)連結します。これにより、データフレームの列数が増えますが、行数はそのままです。この操作は、異なる特徴を持つデータセットを横に拡張して一つの大きなデータセットに統合したい場合に適しています。

以下は縦(行)方向 (axis=0)と横(列)方向 (axis=1)の図です。

まとめ

この記事では、Pandasでデータ結合を行う3つのメソッド(merge、join、concat)の違いを解説しました。

以下に本記事で説明した内容をまとめます。

いつどれを使うか

merge
異なるデータフレームの共通の列(またはインデックス)を基にした複雑な結合が必要な場合に使用。特に、特定の条件に基づいて結合するレコードを厳密に制御したい時に適しています。

join
主にインデックスに基づいた結合を行いたい場合に使用。特に複数のデータフレームを効率的に結合したい時に便利です。列に基づく結合も可能です。

concat
単純に複数のデータセットを縦(同じ列を持つデータフレームの結合)または横(同じ行を持つデータフレームの結合)に連結したい場合に利用。結合キーの指定は不要で、データセットの拡張に焦点を当てています。

本記事が少しでもお役に立てれば幸いです。

データ分析やPythonを効率良く学びたい方へ

Pandasのデータ統合について、いかがでしたでしょうか?もっと学びたいと思われた方にAI Academy Bootcampの公式LINEをご紹介します。友だち登録してくださった方に無料講義や無料動画のご案内、いまなら受講割引クーポンのプレゼントもございます。

無料で始めるチャンスです!

AI Academy Bootcamp ではAI・データサイエンス、機械学習の実践力を高める全4コース40時間以上の動画が見放題!AIの学習に必須のPythonの学習から始まり、データサイエンス・機械学習など、目的に応じた幅広い分野をカバーしています。

無料講義や無料動画を試して頂いて、ご受講をご検討頂けましたら幸いです。