私は Wes の Python For Data Analysis に取り組んでいますが、この本では扱われていない奇妙な問題に遭遇しました。
以下のコードでは、彼の本の 199 ページに基づいて、データフレームを作成し、それを使用pd.cut()
してcat_obj
. その本によるとcat_obj
、
「特別なカテゴリ オブジェクトです。ビン名を示す文字列の配列のように扱うことができます。内部的には、個別のカテゴリ名を示すレベル配列と、ラベル属性の年齢データのラベル付けが含まれています」
素晴らしい!ただし、まったく同じpd.cut()
コード (以下の [5] 内) を使用してデータフレームの新しい列 ( と呼ばれる) を作成すると、その列は特別なカテゴリ変数としてではなく、単に通常の pandas シリーズとしてdf['cat']
扱われます。
では、カテゴリ変数として扱われるデータフレームに列を作成するにはどうすればよいでしょうか?
In [4]:
import pandas as pd
raw_data = {'name': ['Miller', 'Jacobson', 'Ali', 'Milner', 'Cooze', 'Jacon', 'Ryaner', 'Sone', 'Sloan', 'Piger', 'Riani', 'Ali'],
'score': [25, 94, 57, 62, 70, 25, 94, 57, 62, 70, 62, 70]}
df = pd.DataFrame(raw_data, columns = ['name', 'score'])
bins = [0, 25, 50, 75, 100]
group_names = ['Low', 'Okay', 'Good', 'Great']
In [5]:
cat_obj = pd.cut(df['score'], bins, labels=group_names)
df['cat'] = pd.cut(df['score'], bins, labels=group_names)
In [7]:
type(cat_obj)
Out[7]:
pandas.core.categorical.Categorical
In [8]:
type(df['cat'])
Out[8]:
pandas.core.series.Series