はじめに
複数のデータを1つにまとめたいとき、pandasには主に2つの方法があります。
merge()… SQLのJOINのように横方向で結合するconcat()… 縦や横に「そのまま並べる」ようなイメージ
「似ているようで、まったく使いどころが違う」この2つをマスターすれば、複数ファイルや集計結果の統合がぐっと楽になります。
この記事では、merge と concat の違い・使い分け・注意点を、実例でわかりやすく解説します。
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の違いまとめ
| 比較項目 | merge | concat |
|---|---|---|
| 結合方向 | 横方向(行単位) | 縦 or 横 |
| 主な用途 | SQL的に「キー」で行を結合 | 同じ構造のデータをまとめる |
| キー列 | 必須 | 不要(自動で連結) |
| 柔軟性 | 厳密(キーが合わないと結合されない) | 寛容(列が違ってもOK) |
4. 実務での使い分けイメージ
| シーン | 使う関数 |
|---|---|
| 「顧客リストに売上を結合したい」 | merge() |
| 「毎月の売上データを1つにまとめたい」 | concat() |
| 「分析結果をもとの表に追加したい」 | merge() or concat(axis=1) |
5. まとめ
merge()→ 共通のキーで「JOIN」的な結合(精密)concat()→ そのまま「縦や横に並べる」感じ(ざっくり)
pandasでは、複数のデータをつなげる機会が多いため、これらの使い分けをマスターすることが非常に重要です。

コメント