データ分析実践
中級問題チェック
問題 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)