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

問題 25 /40

次のpandasの記述に関して、正しい説明はどれか。 df = pd.DataFrame( {'身長': [145, 155, 156, 164, 168, 170, 172, 176, 180, 199]}) df.assign( 身長_クリップ = df['身長'].clip( lower = avg - 2 * sigma, upper = avg + 2 * sigma)) *avgは平均、sigmaは標準偏差とする。

選択 1

assignメソッドはDataFrameに列を追加するが、「身長_クリップ」が文字列として指定されていないためエラーになる。

選択 2

clipメソッドは、lower引数とupper引数を同時に指定することはできない。

選択 3

clipメソッドは、下限値と上限値を超えたレコードを削除する。

選択 4

clipメソッドは、下限値と上限値を超えていない場合、値はそのままになる。

解説

選択肢4が正解です。 df = pd.DataFrame( {'身長': [145, 155, 156, 164, 168, 170, 172, 176, 180, 199]}) ▶︎ df.assign( 身長_クリップ = df['身長'].clip( lower = avg - 2 * sigma, upper = avg + 2 * sigma)) ▶︎ 【選択肢1】 assignメソッドはDataFrameに列を追加するが、「身長_クリップ」が文字列として指定されていないためエラーになる。 誤った説明です。 assingメソッドで追加する列の名前はキーワード引数で指定するため、「身長_クリップ = 〜」と指定します。「身長_クリップ」を「'身長_クリップ'」のように文字列で指定するとエラーになります。 【選択肢2】 clipメソッドは、lower引数とupper引数を同時に指定することはできない。 誤った説明です。 同時に指定することもできますし、片方だけ指定することもできます。 【選択肢3】 clipメソッドは、下限値と上限値を超えたレコードを削除する。 誤った説明です。 削除ではなく、lower引数とupper引数で指定した値で置き換えます。 問題文の場合、lowerとupperの値は以下となります。 avg = df['身長'].mean() ▶︎ 168.5 sigma = df['身長'].std() ▶︎ 15.072049186048547 lower = avg - 2 * sigma ▶︎ 138.3559016279029 upper = avg + 2 * sigma ▶︎ 198.6440983720971 問題文のデータの場合、インデックス0の値は145で、下限値(lower)を下回っていないため、145のままになります。 インデックス10の値は199で、上限値(upper)を上回っているため、上限値である198.644098に置き換わります。 【選択肢4】 clipメソッドは、下限値と上限値を超えていない場合、値はそのままになる。 正しい説明です。 問題文のデータの場合、インデックス0〜9は下限値〜上限値の範囲に収まっているため、値はそのままです(avgとsigmaがfloat64のため、「身長_クリップ」の列はfloat64になり小数点がつきます)。 (公式書籍 p.186)