データクリーニングの一連の作業のうち、データ型を確認する手順を説明します。カテゴリカルデータを処理するための最初の一歩です。


チートシート

やりたいこと コーディング
データの型を調べる df.dtypes
整数型にする df['列名']=df['列名'].astype(int)
カテゴリカル型にする df['列名']=pd.Categorical(df['列名'])

ここでは、1の 「そもそもデータタイプがカテゴリカル変数かどうか」について説明します。

  1. そもそもデータタイプがカテゴリカル変数かどうか
  2. カテゴリカルデータの要素を概観する
    • 総数
    • 種類
    • 種類ごとの数(集計)
  3. NAN(欠損値)の有無を調べる

オリジナルデータdf の各列のデータの型を調べるには、df.dtypes と入します。

1
2
# data frame の各列のデータ型を見る
df.dtypes  

アウトプットです。

データフレーム名はdfという名前で14列です。

PY_01     object
PY_02    float64
PY_03      int64
PY_04    float64
PY_05      int64
PY_06     object
PY_07    float64
PY_08    float64
PY_09      int64
PY_10     object
PY_11      int64
PY_12    float64
PY_13    float64
Py_14    float64
dtype: object

PY_07 はカテゴリカル変数なので、実際は都道府県番号が入っています。 しかし、データを読み込むにあたり、float64 と認識されています。カテゴリカルデータの方に変更します。 

都道府県番号なので、まず、float64 から整数 int64 に変更してそれから、カテゴリカルデータに変更します。

整数にするには、 df['列名']=df['列名'].astype(int) とします。

1
2
3
4
5
# data frame の'PY_07' 列の型を整数にする
df['PY_07']=df['PY_07'].astype(int) 
# 確認

df['PY_07'].dtypes

結果は以下のとおりです:

dtype('int64')

次に、カテゴリカルのデータ型に変換する。Categoricalメソッドを使います。 具体的には:df['列名']=pd.Categorical(df['列名']) です。

整数型や浮動小数点型にする時と構文が異なります

1
2
3
4
5
# data frame の'PY_07' 列の型をカテゴリカルデータ型にする
df['PY_07']=pd.Categorical(df['PY_07'])

# 確認する
df['PY_07'].dtypes

結果は以下のとおり:

CategoricalDtype(categories=[ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
                  16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
                  31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
                  46, 47],
                 ordered=False)

ひとこと

カテゴリカル変数の場合、データの型が正しく読み込まれているかの確認作業は必須です。 カテゴリカル変数といっても、データの中身が整数で種類を表したりすると、今回の例のように整数型は浮動小数点型として認識している事が多々あります。注意が必要ですね。