【pandas中級編①】mergeとconcatで複数の表をつなげる方法まとめ

はじめに

複数のデータを1つにまとめたいとき、pandasには主に2つの方法があります。

  • merge()SQLのJOINのように横方向で結合する
  • concat() … 縦や横に「そのまま並べる」ようなイメージ

「似ているようで、まったく使いどころが違う」この2つをマスターすれば、複数ファイルや集計結果の統合がぐっと楽になります。

この記事では、mergeconcat の違い・使い分け・注意点を、実例でわかりやすく解説します。


1. merge()|キーを使って横に結合(JOIN)

merge() は、共通のキー(列)をもとに、行を横方向に結合する関数です。
SQLの JOIN に非常に似た動作をします。

▶ 例:学生情報と点数データを結合

import pandas as pd

df1 = pd.DataFrame({
"名前": ["太郎", "花子", "次郎"],
"学籍番号": [101, 102, 103]
})

df2 = pd.DataFrame({
"学籍番号": [101, 102, 104],
"点数": [88, 92, 76]
})

# 学籍番号をキーに結合
merged = pd.merge(df1, df2, on="学籍番号", how="inner")
print(merged)

結果:

   名前  学籍番号  点数
0 太郎 101 88
1 花子 102 92

   ✅ on="学籍番号":結合キー
   ✅ how="inner"両方に共通するデータのみを残す


▶ mergeの主なオプション

引数内容
onキーとなる列名(同名の場合は省略可)
how結合方法(”inner” / “left” / “right” / “outer”)
left_on / right_onキーが左右で異なるときに使う

▶ よく使う結合パターン

pd.merge(df1, df2, on="キー列", how="left")   # 左のデータを基準に
pd.merge(df1, df2, on="キー列", how="right") # 右のデータを基準に
pd.merge(df1, df2, on="キー列", how="outer") # 全件結合(NaNが入る)

2. concat()|縦や横に「そのまま」結合

concat() は、インデックスや列名の一致に関係なく、単純に結合する方法です。
複数の表を積み上げる」イメージが近いです。

▶ 例:同じ構造のデータを縦に連結

df_a = pd.DataFrame({
"名前": ["太郎", "花子"],
"点数": [88, 92]
})

df_b = pd.DataFrame({
"名前": ["次郎", "さくら"],
"点数": [95, 70]
})

# 縦に連結(indexはそのまま)
combined = pd.concat([df_a, df_b])

結果:

     名前  点数
0 太郎 88
1 花子 92
0 次郎 95
1 さくら 70

     ✅ indexが重複しているので、ignore_index=True をつけるのが一般的

combined = pd.concat([df_a, df_b], ignore_index=True)

▶ 横方向に結合(列を増やす)

df1 = pd.DataFrame({"A": [1, 2, 3]})
df2 = pd.DataFrame({"B": [4, 5, 6]})

pd.concat([df1, df2], axis=1)
axis=0縦方向に連結(デフォルト)
axis=1横方向に連結(列を増やす)

▶ concatの注意点

注意点内容
indexに注意重複しているときは ignore_index=True を忘れずに
列名が一致しない場合NaNが自動で補完される(柔軟な挙動)
合計や平均を出す前に不要なNaNが増えてないか確認すること!

3. mergeとconcatの違いまとめ

比較項目mergeconcat
結合方向横方向(行単位)縦 or 横
主な用途SQL的に「キー」で行を結合同じ構造のデータをまとめる
キー列必須不要(自動で連結)
柔軟性厳密(キーが合わないと結合されない)寛容(列が違ってもOK)

4. 実務での使い分けイメージ

シーン使う関数
「顧客リストに売上を結合したい」merge()
「毎月の売上データを1つにまとめたい」concat()
「分析結果をもとの表に追加したい」merge() or concat(axis=1)

5. まとめ

  • merge() → 共通のキーで「JOIN」的な結合(精密)
  • concat() → そのまま「縦や横に並べる」感じ(ざっくり)

pandasでは、複数のデータをつなげる機会が多いため、これらの使い分けをマスターすることが非常に重要です。

🧭 参考リンク・シリーズナビ

コメント

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