Pandasのjoinメソッドを徹底解説!データ結合の基本から実践まで

「join」の使い方 Pandas

Pandasのデータフレーム操作で欠かせないメソッドの一つに join があります。

特に複数のデータセットを扱う際、データを結合することは頻繁に行われます。

しかし、joinの仕組みやオプションをきちんと理解していないと、意図しない結果を得てしまうことも少なくありません。

この記事では、Pandasの joinメソッド に焦点を当てて、その基本から応用までを詳しく解説します。

この記事を読めば、joinを自在に操り、データ結合の達人になれること間違いなしです!

joinメソッドとは?

Pandasのjoinメソッドは、インデックス を基準にデータフレームを結合するためのメソッドです。

SQLの JOIN に似ていますが、異なる点は インデックス を基準にしていることです。

データフレーム同士を 横方向(列方向) に結合するため、データの関連性を保ちながら結合が行えます。

joinの基本

joinの基本的な使い方

import pandas as pd

# データフレームの例
df1 = pd.DataFrame({
    'A': [10, 20, 30],
    'B': ['x', 'y', 'z']
}, index=[1, 2, 3])

df2 = pd.DataFrame({
    'C': [100, 200, 300],
    'D': ['a', 'b', 'c']
}, index=[2, 3, 4])

# joinメソッドで結合
result = df1.join(df2)

# 出力
print(result)
ゆーや
ゆーや

joinはインデックスを基にデータフレームを結合します!
上記の例では、df1 と df2 が共通のインデックス(2, 3)の部分だけが結合されました!
結合されない部分には NaN が挿入されます!

howオプションで結合方法を指定

joinメソッドには、データの結合方法を指定する howオプション があります!

このオプションにより、どのインデックスを基準にデータを結合するかを決定できます!

howには以下の4つのオプションがあります!

オプション説明
left左側(呼び出し側)のデータフレームのインデックスに基づく結合
right右側のデータフレームのインデックスに基づく結合
inner共通のインデックスに基づく結合
outer全てのインデックスに基づく結合
ゆーや
ゆーや

とはいっても、文字で見てもよくわからない!

実際に動きを見てみましょう!

how=’inner’ の場合

import pandas as pd

# データフレームの例
df1 = pd.DataFrame({
    'A': [10, 20, 30],
    'B': ['x', 'y', 'z']
}, index=[1, 2, 3])

df2 = pd.DataFrame({
    'C': [100, 200, 300],
    'D': ['a', 'b', 'c']
}, index=[2, 3, 4])

# joinメソッドで結合
result = df1.join(df2, how='inner')

# 出力
print(result)
ゆーや
ゆーや

how=’inner‘ は、両方のデータフレームで共通するインデックス(2, 3)のみを結合します。

how=’outer’ の場合

import pandas as pd

# データフレームの例
df1 = pd.DataFrame({
    'A': [10, 20, 30],
    'B': ['x', 'y', 'z']
}, index=[1, 2, 3])

df2 = pd.DataFrame({
    'C': [100, 200, 300],
    'D': ['a', 'b', 'c']
}, index=[2, 3, 4])

# joinメソッドで結合
result = df1.join(df2, how='outer')

# 出力
print(result)
ゆーや
ゆーや

how=’outer‘ は、全てのインデックス(1, 2, 3, 4)を結合し、欠けている部分には NaN が挿入されます。

how=’left’の場合

import pandas as pd

# データフレームの例
df1 = pd.DataFrame({
    'A': [10, 20, 30],
    'B': ['x', 'y', 'z']
}, index=[1, 2, 3])

df2 = pd.DataFrame({
    'C': [100, 200, 300],
    'D': ['a', 'b', 'c']
}, index=[2, 3, 4])

# joinメソッドで結合
result = df1.join(df2, how='left')

# 出力
print(result)
ゆーや
ゆーや

how=’left‘ は、左側のデータフレーム(df1)のインデックスを基準に結合します!

how=’right’の場合

import pandas as pd

# データフレームの例
df1 = pd.DataFrame({
    'A': [10, 20, 30],
    'B': ['x', 'y', 'z']
}, index=[1, 2, 3])

df2 = pd.DataFrame({
    'C': [100, 200, 300],
    'D': ['a', 'b', 'c']
}, index=[2, 3, 4])

# joinメソッドで結合
result = df1.join(df2, how='right')

# 出力
print(result)
ゆーや
ゆーや

how=’right‘ は、右側のデータフレーム(df2)のインデックスを基準に結合します!

複数のデータフレームを結合

joinメソッドでは、複数のデータフレームをリストで渡すことも可能です。

import pandas as pd

# データフレームの例
df1 = pd.DataFrame({
    'A': [10, 20, 30],
    'B': ['x', 'y', 'z']
}, index=[1, 2, 3])

df2 = pd.DataFrame({
    'C': [100, 200, 300],
    'D': ['a', 'b', 'c']
}, index=[2, 3, 4])

df3 = pd.DataFrame({
    'E': [7, 8, 9],
}, index=[1, 2, 3])

# joinメソッドで結合
result = df1.join([df2, df3], how='outer')

# 出力
print(result)
ゆーや
ゆーや

リストで複数のデータフレームを渡すことで、一度に結合できます!

まとめ

Pandasのjoinメソッドは、インデックスを基準にデータフレームを結合するため、データの関連性が高い場合に便利です。

howオプションを使いこなせば、データ結合の自由度が広がります。

この記事で紹介した基本から応用例をマスターすれば、複雑なデータ結合も簡単にこなせるようになるでしょう!

コメント

タイトルとURLをコピーしました