いくつかの列がエンコーディングを必要としないところで、パンダのデータフレームをsklearn one-hot-encoded(dataframe/numpy配列)に変換するにはどうすればよいですか?パンダsklearnワンホットエンコードデータフレームまたはnumpy?
mydf = pd.DataFrame({'Target':[0,1,0,0,1, 1,1],
'GroupFoo':[1,1,2,2,3,1,2],
'GroupBar':[2,1,1,0,3,1,2],
'GroupBar2':[2,1,1,0,3,1,2],
'SomeOtherShouldBeUnaffected':[2,1,1,0,3,1,2]})
columnsToEncode = ['GroupFoo', 'GroupBar']
は、既に符号化されたデータフレームにラベルを付け、私はcolumnsToEncode
でマークされた列をエンコードしたいと思いますか?
私の問題は、pd.Dataframe
またはnumpy
の配列表現が優れているかどうかと、エンコードされた部分をもう一方と再マージする方法がわかりません。
私の試みこれまで:
myEncoder = OneHotEncoder(sparse=False, handle_unknown='ignore')
myEncoder.fit(X_train)
df = pd.concat([
df[~columnsToEncode], # select all other/numeric
# select category to one-hot encode
pd.Dataframe(encoder.transform(X_train[columnsToEncode]))#.toarray() # not sure what this is for
], axis=1).reindex_axis(X_train.columns, axis=1)
お知らせ:私はPandas: Get Dummies/http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.htmlの承知していますが、それは私が倍にあたり、このようなエンコーディングを必要と電車/テスト・スプリットでうまく再生できません。
を行うためにも、優れているに使用しているときpre-one.hotエンコーディングが問題である理由を、このアップデートは、それは私には全く明らかではないと信じていますtrain/test split(両方のセットがおそらくこのエンコーディングを必要とするので、分割する前にそれを行うだけです)。本当に必要な場合は、おそらくscikit-learnのパイプライン(前処理は自動的にクラシファイア/回帰分析に渡される前に呼び出されます)で行うことができます。また、常にdf.as_matrix()を使用してnumpy配列を抽出することができます。 – sascha
明日のフィーチャーユニオンを試してみる必要があります。要点は、折りたたみごとに一定の前処理ステップを実行する必要があることです。 –