Any way to get mappings of a label encoder in Python pandas?
I am converting strings to categorical values in my dataset using the following piece of code.
data['weekday'] = pd.Categorical.from_array(data.weekday).labels
For eg,
index weekday
0 Sunday
1 Sunday
2 Wednesday
3 Monday
4 Monday
5 Thursday
6 Tuesday
After encoding the weekday, my dataset appears like this:
index weekday
0 3
1 3
2 6
3 1
4 1
5 4
6 5
Is there any way I can know that Sunday has been mapped to 3, Wednesday to 6 and so on?
You can create additional dictionary with mapping:
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}
The best way of doing this can be to use label encoder of sklearn library.
Something like this:
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]))
A simple & elegant way to do the same.
cat_list = ['Sun', 'Sun', 'Wed', 'Mon', 'Mon']
encoded_data, mapping_index = pd.Series(cat_list).factorize()
and you are done, check below
print(encoded_data)
print(mapping_index)
print(mapping_index.get_loc("Mon"))