python - 如何用熊猫按顺序标记编码多个类别(多行)?
问题描述
我有一个 pandas 数据框(在 python 中),我想标记编码两列,准备在其上训练机器学习模型。将其从分类数据转换为数字。(我还没有寻找 OneHotEncode 数据)
我有一个与此类似的数据(一旦订购)的数据框:
Main_Category Sub_Category
Cat_0 Sub_1
Cat_1 Cub_1
Cat_1 Aub_2
Cat_2 Sub_3
数据遵循以下关系,其中一个主类别可以有许多独特的子类别。我想先按 Main_Category 排序数据帧,然后按 Sub_Category。这会将所有子类别按其主要类别组合在一起。
df = df.sort_values(['Main_Category', 'Sub_Category'], ascending=[True, True])
然后我想对数据进行编码,使其看起来像这样:
Main_Category Sub_Category
0 0
1 1
1 2
2 3
但是,当我对数据进行编码时,我将其编码如下:
Main_Category Sub_Category
0 2
1 0
1 1
2 3
我相信编码库正在对数据本身进行排序,然后根据这些结果进行编码。我希望它根据我自己的排序进行编码。什么是理想的解决方案?
这是编码列的代码:
from sklearn.preprocessing import LabelEncoder
labelencoder = LabelEncoder()
df['Main_Category'] = labelencoder.fit_transform(df['Main_Category'])
labelencoder = LabelEncoder()
df['Sub_Category'] = labelencoder.fit_transform(df['Sub_Category'])
编辑:我无法显示真实数据,这就是为什么我的问题有虚拟数据。编辑:更新了 sub_category 名称以更好地显示错误
解决方案
是的,正如你提到的,内部labelencoder
排序。如果您想让编码按特定顺序发生,请
直接使用。_encode
from sklearn.preprocessing.label import _encode
unique_main_cat, ind = np.unique(df.Main_Category, return_index=True)
# unique_main_cat would have sorted unique values,
# to get the original order use argmin(ind)
_encode(df['Main_Category'],
uniques=unique_main_cat[np.argsort(ind)],
encode=True)
# (array(['Cat_0', 'Cat_1', 'Cat_2'], dtype=object), array([0, 1, 1, 2]))
unique_sub_cat, ind = np.unique(df.Sub_Category, return_index=True)
_encode(df['Sub_Category'],
uniques=unique_sub_cat[np.argsort(ind)],
encode=True)
# (array(['Sub_1', 'Aub_2', 'Cub_1', 'Sub_3'], dtype=object), array([0, 1, 2, 3]))
推荐阅读
- spring - 为什么不推荐使用 StreamListener
- netbeans - Gluon 单视图客户端:构建
- javascript - JS如何深拷贝两个对象
- javascript - 在Vue Js的for循环中为每个div提供随机背景图像
- deep-learning - 1 小时癫痫记录时间序列的 FPR
- plsql - ORA-00933: SQL 语句未结束
- python - Python 不允许我运行代码(_locateAll_python() 有一个意外的关键字参数 'confidence')
- python - 使用类标签附加散点图的问题
- keycloak - 如何在 keycloak 上创建无密码电子邮件/短信 otp?
- jquery - jquery click() 在这种情况下做什么?