AI資格ドリル
資格を選ぶ

用語比較

mergeとconcatの違い|キーで結合するか、そのまま連結するか(Python3データ分析)

mergeとconcatの違いはまとめ方の基準で、merge()は特定の列をキーにしてSQLの結合のように行を対応づけ、concat()はキーを使わずpandasオブジェクトをそのまま並べてつなげます。

キーが重複していると、mergeでは同じキーの行がすべての組み合わせで結ばれるので、左右に2行ずつなら4行になります。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。

merge()とconcat()の要点

merge()

特定の列をキーにして、SQL形式の結合を行う。キーが一致する行どうしが対応づけられ、キーが重複していれば組み合わせの数だけ行ができる。

concat()

pandasオブジェクトを連結する。公式の例では、10行のDataFrameを3つに分けたものを、pd.concat(pieces)で行方向につなぎ直している。

違いを表で確認

比較軸merge()concat()
まとめ方の基準特定の列(キー)の値が一致する行どうしを対応づけるキーは使わず、オブジェクトをそのままつなげる
SQLとの関係SQL形式の結合(join)を行うSQLの結合ではなく、行を積み重ねるような連結
渡す引数の形(公式の例)pd.merge(left, right, on="key")(2つのDataFrameとキーの列名)pd.concat(pieces)(DataFrameを並べたリスト)
公式の例での結果キーが重複する2行×2行は4行、キーが一意の2行×2行は2行になる3つに分けた10行のDataFrameが、元の10行にもどる
行数の増え方キーの一致の仕方で決まる(重複があると、組み合わせの数に増える)つなげたオブジェクトの行数の合計になる

Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

顧客表と注文表を、顧客IDでつなぎたい人

2つの表に共通の列(顧客ID)があり、その値が一致する行どうしを対応づけたい場面です。キーの列で結ぶのでmergeを使います。

02

月ごとに分かれた同じ形の表を、1つにまとめたい人

キーで対応づけるのではなく、同じ列を持つ表を縦に並べたい場面です。公式の例のように、表を並べたリストをconcatに渡します。

03

mergeしたら、思ったより行が増えて困っている人

キーの列に同じ値が複数あると、その値の行が左右で総当たりに結ばれます。公式の例では、foo・fooの2行ずつで4行になります。キーが重複していないかを、結合の前に確かめます。

具体例で使い分ける

例 1

キーが重複している2つのDataFrameを merge する

公式の例です。left は key が foo・foo、lval が 1・2 の2行。right は key が foo・foo、rval が 4・5 の2行です。この2つを pd.merge(left, right, on="key") で結合したときの行数と中身を追います。

  • キーの値はどちらも foo なので、left の各行が right の各行と対応づけられます。
  • 結果は4行で、(lval, rval) の組は (1, 4)・(1, 5)・(2, 4)・(2, 5) です。2行×2行の総当たりになっています。
  • 同じ形で、キーが foo・bar と一意のときは、foo どうし、bar どうしが1対1で結ばれ、結果は2行になります。

結論: mergeの結果の行数は、左右の行数の合計ではなく、キーが一致する行の組み合わせで決まります。キーが重複するかどうかを最初に確かめます。

例 2

分割した10行のDataFrameを concat でつなぎ直す

公式の例です。10行4列のDataFrameを、df[:3]・df[3:7]・df[7:] の3つに分けてリストにし、pd.concat(pieces) に渡します。

  • 3つの部分の行数は、3行・4行・3行です。合計すると10行です。
  • concat はキーを使いません。リストの順に、各部分を並べてつなげます。
  • 結果は、元のDataFrameと同じ10行4列です。行の索引も、元の0から9のままです。

結論: concatは、行を対応づけず並べてつなぎます。結果の行数は、つなげたオブジェクトの行数の合計です。

問題文から答えを選ぶ手順

  1. 1

    共通の列(キー)で行を対応づけたいかを見る

    対応づけたいならmerge、同じ形の表を並べるだけならconcatです。

  2. 2

    mergeならキーの重複を確かめる

    左右のキーに同じ値が複数あれば、その値の行は組み合わせの数だけ増えます。

  3. 3

    結果の行数を書き出す

    mergeはキーごとの組み合わせ、concatは行数の合計で数えます。

試験での見分け方

  • 1merge() は特定の列をキーにして、SQL形式の結合を行う。
  • 2concat() は、pandasオブジェクトをキーなしで連結する。行数は、つなげたオブジェクトの合計になる。
  • 3mergeでキーが重複していると、その値の行は左右の総当たりになり、行数が増える。

誤答しやすい選択肢

mergeの結果の行数を、左右の行数の合計と考える

修正: mergeはキーが一致する行どうしを結びます。公式の例では、2行ずつで4行になりました。

concatも、キーの列で行を対応づけると考える

修正: concatはキーを使いません。公式の説明は、pandasオブジェクトを連結する関数です。キーで結ぶのはmergeです。

行を1件ずつ追加して、DataFrameを作ろうとする

修正: 公式は、行の追加はコピーが必要で高コストになりうると述べ、レコードのリストをDataFrameのコンストラクタに渡すことを勧めています。

確認問題

Q1特定の列をキーにして、SQL形式の結合を行うpandasの関数は?

答え: merge()

merge()は、特定の列に沿って、SQL形式の結合を行います。キーを使わない連結はconcat()です。

Q2key が foo・foo の2行のDataFrameと、key が foo・foo の2行のDataFrameを、pd.merge(left, right, on="key") で結合すると、何行になるか?

答え: 4行

キーが同じ行どうしが総当たりで結ばれ、2行×2行の4行になります。キーが foo・bar と一意なら2行です。

Q3df[:3]・df[3:7]・df[7:] に分けたDataFrameを pd.concat で連結すると、行数は?

答え: 元の行数と同じ10行

concatは3行・4行・3行をそのままつなげます。キーを使わないため、行数は合計になります。

到達チェック

  • mergeとconcatの、まとめ方の基準の違い(キーか連結か)を言い分けられる
  • キーが重複するときの、mergeの結果の行数を数えられる
  • 公式の例の結果(4行、2行、10行)を書き出せる

同じ資格で次に知りたいこと

よくある質問

Qmergeとは?

A

pandasで、特定の列をキーにしてSQL形式の結合を行う関数です。キーが一致する行どうしが対応づけられます。

Qconcatとは?

A

pandasオブジェクトを連結する関数です。公式の例では、3つに分けたDataFrameのリストを渡して、元の10行につなぎ直しています。

Qmergeとconcatの違いは?

A

まとめ方の基準です。mergeはキー列の値で行を対応づけ、concatはキーを使わずにつなげます。

Qmergeで行が増えるのはなぜですか?

A

キーに同じ値が複数あると、その値の行が左右で総当たりに結ばれるためです。公式の例では、foo・fooの2行ずつで4行になります。

Qデータ分析試験の範囲?

A

本サイトの第4章pandasの「結合とグループ化」で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。

次に見る比較

執筆: AI資格ドリル編集部(運営者情報を見る)