下書きに眠っていたので供養
スタックオーバーフローの下記記事をまとめました。
Convert categorical data in pandas dataframe - Stack Overflow
カテゴリカルにせず、文字列の列を整数列に変換する場合
In [1]: pd.factorize( ['B', 'C', 'D', 'B'] )[0]
Out[1]: array([0, 1, 2, 0])
カテゴリカル変数として扱う場合
In [1]: df = pd.DataFrame(
{'col1':[1,2,3,4,5],
'col2':list('abcab'), # str
'col3':list('ababb') # str
})
In [2]: df.columns
Out[2]: Index(['col1', 'col2', 'col3'], dtype='object')
この時点で全ての列はobjectになっているので、categoryにcastする
In [3]: df['col2'] = df['col2'].astype('category')
In [4]: df['col3'] = df['col3'].astype('category')
select_dtypes(['category'])
でカテゴリカル変数になっている列を取得できるので、
In [5]: cat_columns = train.select_dtypes(['category']).columns
In [6]: cat_columns
Out[6]: Index(['col2', 'col3'], dtype='object')
となる。