データ分析実践
中級問題チェック

問題 10 /40

pandasのconcat関数、joinメソッド、merge関数の違いについて、誤った説明はどれか。 df1、df2、df3はDataFrameを表すものとする。

選択 1

df1とdf2を縦方向に連結する場合は、concat関数を使う。

選択 2

df1のインデックスとdf2のインデックスをキーにして横方向に結合する場合、merge関数は使えない。

選択 3

df1のインデックスとdf2の特定の列をキーにして横方向に結合する場合、joinメソッドとmerge関数が使える。

選択 4

一行のコードでdf1、df2、df3を横方向に結合する場合、concat関数とmerge関数が使える。

解説

選択肢2が正解です。 【選択肢1】 df1とdf2を縦方向に連結する場合は、concat関数を使う。 正しい説明です。 縦方向の連結は、以前はappendメソッドも使えましたが、現在はconcat関数だけです。 concat関数はデフォルトで縦方向の連結になります。 ■ 縦方向の連結 pd.concat([df1, df2]) 【選択肢2】 df1のインデックスとdf2のインデックスをキーにして横方向に結合する場合、merge関数は使えない。 誤った説明です。 concat関数とjoinメソッドは、デフォルトのキーがインデックスです。merge関数もインデックスをキーにすることが可能で、その場合は以下のように記述します。 ■ インデックスをキーにした横方向の結合 pd.merge(df1, df2, left_index=True, right_index=True) または pd.concat([df1, df2], axis=1) または df1.join(df2) 列をキーにする場合は、通常はmerge関数を使います。 ■ 列をキーにした横方向の結合 pd.merge(df1, df2, on='列名') concat関数は列をキーにすることはできません。joinメソッドは選択肢3の記述で結合元のキーを列にすることができますが、やや特殊な使い方です。 【選択肢3】 df1のインデックスとdf2の特定の列をキーにして横方向に結合する場合、joinメソッドとmerge関数が使える。 正しい説明です。 joinメソッドは次の記述のように、df2(結合元)の特定の列と、df1のインデックスをキーにして結合できます。また、merge関数も特定の列とインデックスをキーにすることができます。 ■ インデックスと特定の列をキーにした横方向の結合 df2.join(df1, key='列名') または pd.merge(df1, df2, left_index=True, right_on='列名') 【選択肢4】 一行のコードでdf1、df2、df3を横方向に結合する場合、concat関数とmerge関数が使える。 正しい説明です。 次の記述で三つのDataFrameを横方向に結合することができます。 ■ インデックスをキーにして三つのDataFrameを横方向に結合 pd.concat([df1, df2, df3], axis=1) ■ 特定の列をキーにして三つのDataFrameを横方向に結合 pd.merge((pd.merge(df1, df2, on='列名'), df3, on='列名') なお、joinメソッドでできることはmerge関数でできます。逆に、merge関数のvalidate引数による重複チェックなどは、joinメソッドではできません。そのため、縦方向に連結する場合はconcat関数を使い、横方向に結合する場合はmerge関数を使うと覚えやすいです。 (公式書籍 p.76-89)