2016-10-30 3 views
0

28個の列を持つムービーのデータセットがあります。その一つがジャンルです。このデータセットの各行について、列ジャンルの値は「アクション|アニメーション|コメディ|ファミリー|ファンタジー」の形式になります。 pandas.get_dummies()を使用してエンコードしたいが、列に複数の値があるので、そのような条件にどう対処するのか?単一のフィーチャの複数のカテゴリ値pythonを使用してバイナリに変換する方法

私はサンプルデータを添付しましたが、関連する列はDataです。 出力をOutputと期待しています。

しかし、私は、バイナリにカテゴリ値を変換するコードの下に使用する場合

import pandas as pd 
Data = pd.read_csv('sample.csv', encoding = "ISO-8859-1") 
DataConverted = pd.get_dummies(Data) 
DataConverted.to_csv('sample_out.csv') 

出力され、以下に示すように(Iつ以上の画像を投稿することができませんよ):

movie_title_Avatar ,movie_title_Pirates of the Caribbean: At World's End ,movie_title_Spectre ,genres_Action|Adventure|Fantasy,genres_Action|Adventure|Fantasy|Sci-Fi,genres_Action|Adventure|Thriller 
1.0,0.0,0.0,0.0,1.0,0.0 
0.0,1.0,0.0,1.0,0.0,0.0 
0.0,0.0,1.0,0.0,0.0,1.0 

答えて

-1

こちらは少しトリッキーですが、私はそこには多くのジャンルの種類がないことを保証することができます。したがって、2^nという形式の値を持つ定数を作ることができます。たとえば、Actionジャンルの値は1です。アドベンチャータイプは2かもしれません。ファンタジー4を選んでください。次に、一定の値で「または」操作を実行するジャンルを保存することができます。たとえば、アバタージャンルがアクションとファンタジーで、アドベンチャーではない場合などです。このように保存します

const int ACTION = 1, ADVENTURE = 2, FANTASY = 4; 
    movie.genre = movie.genre | ACTION | FANTASY 

次に、列の性別の値を読み取るときは、それぞれの定数値で 'and'演算を実行する必要があります。

if(movie.genre & ACTION == ACTION) 
     print("Action movie") //will execute 
    if(movie.genre & ADVENTURE == ADVENTURE) 
     print("Adventure movie") //won't execute 

、小数点以下の値で、それはあなたに意味を成していない可能性があります:アバターのジャンルはアクションであるかどうかを知るためにたとえば、あなたは、あなただけの次の操作を行うと、それは冒険であるかどうかを確認する必要があります。しかし、バイナリ値でこれについて考える必要があります。 1は0001であり、 2 = 0010と4 = 0100です。アバターの例で 'or'演算を実行すると、ジャンルを01001にすることができます。これは小数点の列挙体系で5です。しかし、01001は実際にはジャンルの種類ではありません。したがって、ムービーが特定のジャンルタイプであるかどうかを知るには、定数値で 'and'演算を実行する必要があります。したがって、movie.genre &の実行は、01001 & 00001 = 00001に相当します。ここで、00001の値はACTIONと解釈される定数値と同じです。つまり、AvatarはAction映画ですが、01001 & 00010は0に等しいので、アドベンチャームービーではなく、ADVENTURE(2)の定数値と同じではないためです。

関連する問題