TL;DR :
pd.get_dummies(cat.astype(pd.CategoricalDtype(categories=categories)))
- 古いパンダ:
pd.get_dummies(cat.astype('category', categories=categories))
get_dummies (または同等の関数) にカテゴリの名前を渡して、特定のデータフレームに表示されないカテゴリに対して、0 の列を作成する方法はありますか?
はいあります!Pandas には、カテゴリ データ専用の特別なタイプの Series があります。このシリーズの属性の 1 つは、get_dummies
考慮される可能なカテゴリです。次に例を示します。
In [1]: import pandas as pd
In [2]: possible_categories = list('abc')
In [3]: cat = pd.Series(list('aba'))
In [4]: cat = cat.astype(pd.CategoricalDtype(categories=possible_categories))
In [5]: cat
Out[5]:
0 a
1 b
2 a
dtype: category
Categories (3, object): [a, b, c]
次に、get_dummies
まさにあなたが望むことをします!
In [6]: pd.get_dummies(cat)
Out[6]:
a b c
0 1 0 0
1 0 1 0
2 1 0 0
Series
カテゴリカルまたはを作成する方法は他にもたくさんありますがDataFrame
、これは私が最も便利だと思う方法です。それらのすべてについては、パンダのドキュメントで読むことができます。
編集:
私は正確なバージョン管理に従っていませんが、少なくともバージョン 0.17.0 までは、pandas が疎行列を処理する方法にバグがありました。バージョン 0.18.1 (2016 年 5 月リリース) で修正されました。
sparse=True
バージョン 0.17.0 の場合、 a オプションを使用してこれを実行しようとすると、DataFrame
ダミー変数が欠落している 0 の列が の列になり、NaN
密に変換されます。
pandas 0.21.0 が追加されたCategoricalDType
ようで、元の回答のようにカテゴリを明示的に含むカテゴリを作成することは廃止されました。いつになるかはわかりません。