1

我正在使用 python(与 pandas 等)我有一个带有标签列的数据框(类 a、b、c 等 - 总共 38 个)。我想使用 Xgboost 进行预测,但它只适用于 0:num_classes 范围内的标签。

所以基本上我需要: - 用 0:num_class 索引替换标签列中的所有值(a 用 0,b 用 1,c 用 2 等)

类数为 38,因此无法手动映射和替换。有没有一种优雅的方式来做到这一点?(在 R 中我会使用:

train_data$Class <- as.numeric(factor(train_data$Class))

但它在这里不起作用。

4

3 回答 3

2
labels = ['a','b','a','c','b','a','c','a']
y = pandas.Series(labels)
unique_labels, y_inversed = numpy.unique(y, return_inverse=True)
print list(unique_labels[y_inversed]) == labels

结果:真

于 2016-05-30T04:21:44.273 回答
1

您可以使用pandas.factorize功能:

import pandas as pd
df.Class = pd.factorize(df.Class)[0]

如果你想向后,你可以存储该变量,然后重新分配它:

factor = pd.factorize(df.Class)
# forward
df.Class = factor[0]
# backward
df.Class = factor[1]
于 2015-11-09T05:36:12.233 回答
1

对于简单的转换,您可以在数据框上使用 map 方法,

df.class
Out[34]: 
1    a
2    b
3    c
4    c
5    b
6    a
Name: 0, dtype: object

df.class.map({'a':1,'b':2,'c':3})
Out[35]: 
1    1
2    2
3    3
4    3
5    2
6    1
Name: 0, dtype: int64
于 2015-11-09T06:21:45.277 回答