2017-02-13 2 views
5

次のコードを使用して、文字列を自分のデータセットのカテゴリ値に変換しています。例えばのためにPython pandasのラベルエンコーダのマッピングを取得する方法はありますか?

data['weekday'] = pd.Categorical.from_array(data.weekday).labels 

、平日を符号化した後

index weekday 
0  Sunday 
1  Sunday 
2  Wednesday 
3  Monday 
4  Monday 
5  Thursday 
6  Tuesday 

、私のデータセットは次のように表示されます:

index weekday 
    0  3 
    1  3 
    2  6 
    3  1 
    4  1 
    5  4 
    6  5 

は、私は日曜日は3にマッピングされたことを知ることができる方法はあります、水曜日から6時など?

weekdays.cat.categories.get_loc('Sun') 

答えて

7

これを行うための最善の方法は、sklearnライブラリのラベルエンコーダを使用することができます。その "カテゴリ" を検査し、その後

weekdays = pd.Series(['Sun', 'Sun', 'Wed', 'Mon', 'Mon']).astype('category') 

2

まず、カテゴリシリーズを作ります。

このような何か:

from sklearn import preprocessing 
le = preprocessing.LabelEncoder() 
le.fit(["paris", "paris", "tokyo", "amsterdam"]) 
list(le.classes_) 
le.transform(["tokyo", "tokyo", "paris"]) 
list(le.inverse_transform([2, 2, 1])) 
8

あなたはマッピングに追加辞書を作成することができます。

from sklearn import preprocessing 
le = preprocessing.LabelEncoder() 
le.fit(data['name']) 
le_name_mapping = dict(zip(le.classes_, le.transform(le.classes_))) 
print(le_name_mapping) 
{'Tom': 0, 'Nick': 1, 'Kate': 2} 
1

これを行うための多くの方法があります。

は、独自の方法で行く、あなたがカテゴリを追加することができます:あなたはしかし、この特定のケースでは、あなたは最高のあなたに合う2つのオプションがありpd.factorizesklearn.preprocessing.LabelEncoderなどを考慮することができる

pd.Categorical(df.weekday, [ 
    'Sunday', 'Monday', 'Tuesday', 
    'Wednesday', 'Thursday', 'Friday', 
    'Saturday'] ).labels 

他オプションは、直接同じことを行うにはdict

df.weekday.map({ 
    'Sunday': 0, 
    'Monday': 1, 
    # ... and so on. You get the idea ... 
}) 
0

シンプル&エレガントな方法を使用して値をマッピングすることです。

cat_list = ['Sun', 'Sun', 'Wed', 'Mon', 'Mon'] 
encoded_data, mapping_index = pd.Series(cat_list).factorize() 

、あなたはををやっている、あなたは別個の値が漏れる可能性がある、ハードコードされた値のリストを作成し、データに来ているかわからない場合は

print(encoded_data) 
print(mapping_index) 
print(mapping_index.get_loc("Mon")) 
+0

下に確認してください。 LabelEncoder()はどんな方法でも処理します。 – Himanshu

関連する問題