如何使用pandas对多个类别(多行)进行标签编码?

2024-04-25 09:48:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据帧(在python中),我想标记encode两列,准备在上面训练机器学习模型。将其从分类数据转换为数值。(我现在还不希望OneHotEncode数据)


我有一个与此类似的数据帧(一旦订购):

Main_Category    Sub_Category
Cat_0            Sub_1
Cat_1            Cub_1
Cat_1            Aub_2
Cat_2            Sub_3

数据遵循以下关系,其中主类别可以有许多唯一的子类别。我想先按主类别排序,然后按子类别排序。这将把所有子类别按其主类别分组。在

^{pr2}$

然后我想对数据进行编码,使其看起来像这样:

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'])

编辑:我不能显示真实的数据,这就是为什么我的问题有虚拟数据。 编辑:更新了子类别名称以更好地显示错误


Tags: 数据编辑编码df排序main分类transform
1条回答
网友
1楼 · 发布于 2024-04-25 09:48:21

是的,如您所述,labelencoder执行排序internally。 如果要使编码按特定顺序进行,请使用_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]))

相关问题 更多 >

    热门问题