はじめに
Pandasを使ってデータ分析をする際に避けて通れないのが、データセットの結合です。
ただ、Pandasにはデータ結合のためのメソッドとして、merge
、join
、concat
の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の学習から始まり、データサイエンス・機械学習など、目的に応じた幅広い分野をカバーしています。
無料講義や無料動画を試して頂いて、ご受講をご検討頂けましたら幸いです。