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

問題 5 /40

pandasのapply、map、applymapメソッドに関して、誤った結果はどれか。 df ▶︎

選択 1

df = df.apply(lambda x: x + '先生') df ▶︎

選択 2

df['関東'] = df['関東'].map(lambda x: x + '先生') df ▶︎

選択 3

df['関西'] = df.loc[:, '関西'].applymap(lambda x: x + '先生') df ▶︎

選択 4

df['関西'] = df['関西'].map({'藤井': '藤井先生', '糸谷': '糸谷先生'}) df ▶︎

解説

選択肢3が正解です。 apply、map、applymapメソッドは、対応できる処理に違いがあります。
実用的なのは、Series、DataFrame、行方向に対応したapplyメソッドです。辞書によるマッピングを利用するときはmapメソッドを使います。applymapメソッドは廃止予定となっています。 問題文のDataFrameです。 df = pd.DataFrame( {'関東': ['羽生', '谷合'], '関西': ['藤井', '糸谷']}) ▶︎ 【選択肢1】 df = df.apply(lambda x: x + '先生') df ▶︎ 正しい結果です。 applyメソッドはSeriesとDataFrameの両方に対応しています。ここではDataFrameの各値に「先生」を付加しています。 lambda式は無名関数と呼ばれており、defで関数を定義するほどではない小さな処理をする際に利用します。構文は「lambda 引数 : 式」で、式で使用した変数を、lambdaの後に続く引数に渡します。コロンの前の「lambda 引数」が「式の返り値」と考えると分かりやすいです。 このlambda式をapplyメソッドなどに渡すことにより、DataFrameやSeriesの各値に処理を適用することができます。 【選択肢2】 df['関東'] = df['関東'].map(lambda x: x + '先生') df ▶︎ 正しい結果です。 mapメソッドはSeriesの各値に処理を適用できます。 選択肢2のように末尾に文字列を追加するだけなら、次の記述でも可能です。 df['関東'] = df['関東'] + '先生' lambda式の用途は、Pythonやpandasの既存の関数で処理できない場合に使います。 例えば次のように、「値」の数値を小数点第2位にする場合に利用します。 df ▶︎ df['値'] = df['値'].apply(lambda x: '%.2f'%x) df ▶︎ 【選択肢3】 df['関西'] = df.loc[:, '関西'].applymap(lambda x: x + '先生') df ▶︎ 誤った結果です。 df.loc[:, '関西']は、df['関西']と同じでSeriesです。applymapメソッドはSeriesに対しては適用できないため、AttributeErrorになります。 「df.loc[:, ['関西']]」や「df.loc[:, ['関東', '関西']]」のように、対象がDataFrameであれば適用できます。 【選択肢4】 df['関西'] = df['関西'].map({'藤井': '藤井先生', '糸谷': '糸谷先生'}) df ▶︎ 正しい結果です。 mapメソッドは辞書によるマッピングができます。引数で指定した辞書のキーと一致するフィールドを、指定した値に変換することができます。 (公式書籍 p.34)