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オプションを使いこなせば、データ結合の自由度が広がります。
この記事で紹介した基本から応用例をマスターすれば、複雑なデータ結合も簡単にこなせるようになるでしょう!
コメント