gpt4 book ai didi

python - 如何用 pandas 按顺序标记编码多个类别(多行)?

转载 作者:太空宇宙 更新时间:2023-11-03 21:13:31 25 4
gpt4 key购买 nike

我有一个 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'])
<小时/>

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

最佳答案

是的,正如您提到的,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]))

关于python - 如何用 pandas 按顺序标记编码多个类别(多行)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54883928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com