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

問題 21 /40

pandasの属性とメソッドの使い方として、誤っているものはどれか。

選択 1

shape属性で行数と列数を確認できる。

選択 2

type属性で各カラムのデータ型を確認できる。

選択 3

applyメソッドで各データに関数を適用できる。

選択 4

set_indexメソッドで特定のカラムのデータをインデックスに指定できる。

解説

選択肢2が正解です。 【選択肢1】 shape属性で行数と列数を確認できる。 正しい説明です。 DataFrameに対して「df.shape」とすると、例えば「(3, 4)」のように行数と列数が返ります。 Seriesに対して「ser.shape」とすると、例えば「(3,)」のように要素数が返ります。 shape属性はメソッドではないため、「shape()」のように丸カッコは付けません。 なお、NumPyも同じ名前のshape属性を使って配列の形状を確認できます。 【選択肢2】 type属性で各カラムのデータ型を確認できる。 誤った説明です。 各カラムのデータ型を確認できるのは、type属性ではなくdtypes属性です。 次のDataFrameのdtypes属性を確認します。 df.dtypes ▶︎ 日付 object データ int64 dtype: object 「日付」の列は文字列のためobjectとなり、「データ」の列は整数のため「int64」となります。 typeはPython標準の関数です。例えば「type(df)」とすると「pandas.core.frame.DataFrame」のようにオブジェクト自体の型が返ります。 「type」が付く属性名やメソッド名は紛らわしいので、ここでまとめておきます。 ■ pandas dtypes属性(データ型を確認) astypeメソッド(データ型を変換) ■ NumPy dtype属性(データ型を確認) astypeメソッド(データ型を変換) ■ Python標準 type関数(オブジェクトの型を確認) 【選択肢3】 applyメソッドで各データに関数を適用できる。 正しい説明です。 applyメソッドはデータ1つずつに関数を適用できます。既存の関数だけでなく、自分で定義した関数も適用できます。 次のDataFrameがある場合を考えます。 df = pd.DataFrame( [[1, 2], [3, 4]], index=['1行', '2行'], columns=['A列', 'B列']) ▶︎ 数値が3以下か、もしくは3よりも大きいか判定する関数を作成します。 def func(x): if x <= 3: return 'Low' else: return 'High' この関数をB列に適用して、結果をC列に記録します。 df.loc[:, 'C列'] = df.loc[:, 'B列'].apply(func) ▶︎ func関数の仮引数「x」にB列の値が順番に代入され、C列に結果が記録されます。 【選択肢4】 set_indexメソッドで特定のカラムのデータをインデックスに指定できる。 正しい説明です。 set_indexメソッドは、既存のカラムの値をインデックスに指定します。 次のDataFrameがある場合を考えます。 df = pd.DataFrame( [['1日', 1], ['2日', 2]], columns=['日付', 'データ']) ▶︎ この「日付」の列をインデックスに指定します。 df.set_index(['日付']) ▶︎ なお、set_indexメソッドに引数「drop=False」を付けると、指定したカラムが移動ではなくコピーになります。また、set_indexメソッドは新たなDataFrameを返します。元のDataFrameを直接変更する場合は「inplace=True」の引数を付けます。 (公式書籍 p.152-155、158)