Help us understand the problem. What is going on with this article?

[Python/pandas] カテゴリカル変数をいい感じに前処理する

More than 1 year has passed since last update.

カテゴリカル変数のOneHotEncodingをしようと四苦八苦しました。scikit-learnのpreprocessingでなんとか、と思っていたんですが、結局pandasの関数で一瞬で解決することがわかったのでそれをメモしておきます。

数時間試行錯誤していたのがアホらしくなるほどあっさり解決してしまったので、きっといるであろう同じつまづきをしている世の技術者の助けになればと思います

参考

pandas - pandas.get_dummies

やりかた

Kaggleでも有名なtitanicのデータセットを使います。DataFrameとして取り込んだ状態から始めます

jupyter notebookの出力をそのまま使いたいところですが、Qiita上にうまいこと貼り付ける手段を知らないので、tableは別途csvtomdを使って生成したやつをコピペしてます。ご了承ください。

DataFrame読み込み

df_train = pd.read_csv("train.csv")

df_train.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
1 0 3 Braund, Mr. Owen Harris male 22 1 0 A/5 21171 7.25 S
2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female 38 1 0 PC 17599 71.2833 C85 C
3 1 3 Heikkinen, Miss. Laina female 26 0 0 STON/O2. 3101282 7.925 S
4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35 1 0 113803 53.1 C123 S
5 0 3 Allen, Mr. William Henry male 35 0 0 373450 8.05 S

ダミー変数への変換

# カテゴリカル変数の1つである "Pclass" をエンコード
# プリフィックス "Pclass" をつけてカラムの判別がつくようにする
encoded = pd.get_dummies(df_train.Pclass, prefix=df_train.Pclass.name ,prefix_sep="_")

encoded.head()
Pclass_1 Pclass_2 Pclass_3
0 0 0 1
1 1 0 0
2 0 0 1
3 1 0 0
4 0 0 1

以上です。あとは DataFrame.drop で元のPclass列を落として、代わりにこれらの列をjoinしてあげるだけです。関数を知ってしまえば一瞬なんですが、知らないことで無駄な時間を遣ってしまいました。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away