2016-07-21 71 views
6

私は2つのカテゴリ変数とID変数とターゲット変数(分類用)を持つPandas Dataframeを持っています。私はOneHotEncoderでカテゴリ値を変換することができました。この結果、疎な行列が得られます。SklearnでOneHotEncoderの出力を使用するにはどうすればよいですか?

ohe = OneHotEncoder() 
# First I remapped the string values in the categorical variables to integers as OneHotEncoder needs integers as input 
... remapping code ... 

ohe.fit(df[['col_a', 'col_b']]) 
ohe.transform(df[['col_a', 'col_b']]) 

しかし、私はDecisionTreeClassifierにこのスパース行列を使用することができますか見当もつかない?特に、後でデータフレームに他の非カテゴリ変数を追加したいとき。ありがとう!

EDIT miraculixxのコメントへの返信で :私もsklearn-パンダにDataFrameMapperを試してみました

mapper = DataFrameMapper([ 
    ('id_col', None), 
    ('target_col', None), 
    (['col_a'], OneHotEncoder()), 
    (['col_b'], OneHotEncoder()) 
]) 

t = mapper.fit_transform(df) 

しかし、私はこのエラーを取得する:

TypeError: no supported conversion for types : (dtype('O'), dtype('int64'), dtype('float64'), dtype('float64')).

+0

[sklearn-pandas](https://github.com/paulgb/sklearn-pandas)は、データフレームとSklearnを扱うときに本当に役に立ちます。 – miraculixx

答えて

9

私はあなたが見ます既にパンダを使用していますので、なぜget_dummies機能を使用しないのですか?

import pandas as pd 
df = pd.DataFrame([['rick','young'],['phil','old'],['john','teenager']],columns=['name','age-group']) 

結果

name age-group 
0 rick  young 
1 phil  old 
2 john teenager 

今あなたが

pd.get_dummies(df) 

結果

name_john name_phil name_rick age-group_old age-group_teenager \ 
0   0   0   1    0     0 
1   0   1   0    1     0 
2   1   0   0    0     1 

    age-group_young 
0    1 
1    0 
2    0 

get_dummiesでエンコードし、あなたが実際にあなたのSklearnのDecisionTreeClassifierに新しいパンダのデータフレームを使用することができます。

+1

Guiem Boschありがとうございました。ただし、get_dummiesを2つの列に対してのみ使用するように指定する必要がありました。 DataframeにID変数を残しておけば、私のカーネルが亡くなったというメッセージが出ます。 pd.get_dummies(df [['col_a'、 'col_b']]) –

+0

さらに、文字列値を整数に再マッピングする必要はありません。 Otherwize get_dummiesは何もしないようです。 –

関連する問題