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)
有很多方法可以做到这一点。您可以考虑等等pd.factorize。sklearn.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)
一个简单而优雅的方法来做同样的事情。
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)
| 归档时间: |
|
| 查看次数: |
23006 次 |
| 最近记录: |