web-dev-qa-db-ja.com

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などにマッピングされていることを知る方法はありますか?

19
Gingerbread

これを行う最良の方法は、sklearnライブラリのラベルエンコーダを使用することです。

このようなもの:

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]))
17
Algor Troy

マッピングを使用して追加の辞書を作成できます。

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}
37
chinskiy

同じことをするシンプルでエレガントな方法。

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"))
4
Abhishek

これを行うには多くの方法があります。 pd.factorizesklearn.preprocessing.LabelEncoderなど。ただし、この特定のケースでは、最適な2つのオプションがあります。

独自の方法で、カテゴリを追加できます:

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 ...
})
3
ssm

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

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

次に、その「カテゴリ」を調べます。

weekdays.cat.categories.get_loc('Sun')
2
John Zwinck

データフレームに数値とカテゴリの両方のタイプのデータがある場合、使用できます:ここで、Xはカテゴリと数値の両方の変数を持つ私のデータフレームです

from sklearn import preprocessing
le = preprocessing.LabelEncoder()

for i in range(0,X.shape[1]):
    if X.dtypes[i]=='object':
        X[X.columns[i]] = le.fit_transform(X[X.columns[i]])

または、これを試すことができます:

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
data = data.apply(le.fit_transform)

注:この手法は、元に戻すことに興味がない場合に適しています。

1
Vikas Gupta