用語比較
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どこで迷っているかを切り分ける
顧客表と注文表を、顧客IDでつなぎたい人
2つの表に共通の列(顧客ID)があり、その値が一致する行どうしを対応づけたい場面です。キーの列で結ぶのでmergeを使います。
月ごとに分かれた同じ形の表を、1つにまとめたい人
キーで対応づけるのではなく、同じ列を持つ表を縦に並べたい場面です。公式の例のように、表を並べたリストをconcatに渡します。
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
共通の列(キー)で行を対応づけたいかを見る
対応づけたいならmerge、同じ形の表を並べるだけならconcatです。
- 2
mergeならキーの重複を確かめる
左右のキーに同じ値が複数あれば、その値の行は組み合わせの数だけ増えます。
- 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行)を書き出せる
関連ページで確認する
同じ資格で次に知りたいこと
- dropnaとfillnaの違い|欠損値の行を削除するか、値で埋めるか(Python3データ分析)
pandasのdropna()とfillna()の違いを、欠損値の扱い(行を削除するか、指定の値で埋めるか)で整理します。pandas公式「10 minutes to pandas」の4行の例で、結果の行数と埋まる値を追い、確認問題つき。
- Python3データ分析試験とデータ分析実践試験の違い(受験料)
Python3エンジニア認定データ分析試験(40問、正答率70%、受験料1万円・税別)とデータ分析実践試験(40問・75分、正答率70%、1万2千円・税別)の違いを、主教材、出題範囲の配分、受験料、受験の順番まで公式情報で比べます。
- SeriesとDataFrameの違い|1次元のラベル付き配列か、行と列の表か(Python3データ分析)
pandasのSeriesとDataFrameの違いを、次元(1次元か2次元か)と作り方で整理します。pandas公式「10 minutes to pandas」の例で、リストから作るSeries、列を選ぶとSeriesになる点を確認。確認問題つき。
よくある質問
Qmergeとは?
pandasで、特定の列をキーにしてSQL形式の結合を行う関数です。キーが一致する行どうしが対応づけられます。
Qconcatとは?
pandasオブジェクトを連結する関数です。公式の例では、3つに分けたDataFrameのリストを渡して、元の10行につなぎ直しています。
Qmergeとconcatの違いは?
まとめ方の基準です。mergeはキー列の値で行を対応づけ、concatはキーを使わずにつなげます。
Qmergeで行が増えるのはなぜですか?
キーに同じ値が複数あると、その値の行が左右で総当たりに結ばれるためです。公式の例では、foo・fooの2行ずつで4行になります。
Qデータ分析試験の範囲?
本サイトの第4章pandasの「結合とグループ化」で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
