你可以用一个
OrdinalEncoder
In [25]: a = [['Science', 'Blue', 3], ['Math', 'Red', 4], ['Math', 'Red', 5], ['Science', 'Red', 3]]
In [26]: enc = sklearn.preprocessing.OrdinalEncoder()
In [27]: enc.fit(a)
Out[27]: OrdinalEncoder(categories='auto', dtype=<class 'numpy.float64'>)
In [28]: enc.transform(a)
Out[28]:
array([[1., 0., 0.],
[0., 1., 1.],
[0., 1., 2.],
[1., 1., 0.]])
In [29]: enc.categories_
Out[29]:
[array(['Math', 'Science'], dtype=object),
array(['Blue', 'Red'], dtype=object),
array([3, 4, 5], dtype=object)]
In [30]: trace_back_dict = {i: dict(enumerate(v)) for i, v in enumerate(enc.categories_)}
In [31]: trace_back_dict
Out[31]: {0: {0: 'Math', 1: 'Science'}, 1: {0: 'Blue', 1: 'Red'}, 2: {0: 3, 1: 4, 2: 5}}