有没有办法在Python pandas中获取标签编码器的映射?

Gin*_*ead 22 python pandas categorical-data

我正在使用以下代码将字符串转换为数据集中的分类值.

data['weekday'] = pd.Categorical.from_array(data.weekday).labels 
Run Code Online (Sandbox Code Playgroud)

例如,

index    weekday
0        Sunday
1        Sunday
2        Wednesday
3        Monday
4        Monday
5        Thursday
6        Tuesday
Run Code Online (Sandbox Code Playgroud)

对工作日进行编码后,我的数据集显示如下:

index    weekday
    0       3
    1       3
    2       6
    3       1
    4       1
    5       4
    6       5
Run Code Online (Sandbox Code Playgroud)

有什么方法我可以知道星期日已经映射到3,星期三到6,依此类推?

chi*_*kiy 40

您可以使用映射创建其他字典:

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}
Run Code Online (Sandbox Code Playgroud)


小智 19

这样做的最佳方法是使用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]))
Run Code Online (Sandbox Code Playgroud)


ssm*_*ssm 6

有很多方法可以做到这一点。您可以考虑等等pd.factorizesklearn.preprocessing.LabelEncoder但是,在这种特定情况下,您有两个最适合您的选择:

按照您自己的方法,您可以添加类别:

pd.Categorical( df.weekday, [ 
    'Sunday', 'Monday', 'Tuesday', 
    'Wednesday', 'Thursday', 'Friday', 
    'Saturday']  ).labels
Run Code Online (Sandbox Code Playgroud)

另一种选择是直接使用映射值dict

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


Abh*_*hek 6

一个简单而优雅的方法来做同样的事情。

cat_list = ['Sun', 'Sun', 'Wed', 'Mon', 'Mon']
encoded_data, mapping_index = pd.Series(cat_list).factorize()
Run Code Online (Sandbox Code Playgroud)

和你,请查看下面

print(encoded_data)
print(mapping_index)
print(mapping_index.get_loc("Mon"))
Run Code Online (Sandbox Code Playgroud)