多列标签编码:打印映射

时间:2018-06-25 19:34:56

标签: pandas encoding label multilabel-classification

以下代码可用于将字符串转换为分类标签:

import pandas as pd
from sklearn.preprocessing import LabelEncoder

df = pd.DataFrame([['A','B','C','D','E','F','G','I','K','H'],
                   ['A','E','H','F','G','I','K','','',''],
                   ['A','C','I','F','H','G','','','','']], 
                  columns=['A1', 'A2', 'A3','A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'A10'])

pd.DataFrame(columns=df.columns, data=LabelEncoder().fit_transform(df.values.flatten()).reshape(df.shape))

    A1  A2  A3  A4  A5  A6  A7  A8  A9  A10
0   1   2   3   4   5   6   7   9   10  8
1   1   5   8   6   7   9   10  0   0   0
2   1   3   9   6   8   7   0   0   0   0

问题:

如何查询映射(看起来它们是按字母顺序排序的?)?

即像这样的列表:

A: 1
B: 2
C: 3
...
I: 9
K: 10

谢谢!

2 个答案:

答案 0 :(得分:2)

是的,可以单独定义LabelEncoder并稍后查询其classes_属性。

le = LabelEncoder()
data = le.fit_transform(df.values.flatten())

dict(zip(le.classes_[1:], np.arange(1, len(le.classes_))))
{'A': 1,
 'B': 2,
 'C': 3,
 'D': 4,
 'E': 5,
 'F': 6,
 'G': 7,
 'H': 8,
 'I': 9,
 'K': 10}

classes_按照编码顺序存储类别列表。

le.classes_
array(['', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K'], dtype=object)

因此,您可以放心地假设第一个元素被编码为1,依此类推。

要反转编码,请使用le.inverse_transform

答案 1 :(得分:1)

我认为transform中有LabelEncoder

le=LabelEncoder()
le.fit(df.values.flatten())
dict(zip(df.values.flatten(),le.transform(df.values.flatten()) ))
Out[137]: 
{'': 0,
 'A': 1,
 'B': 2,
 'C': 3,
 'D': 4,
 'E': 5,
 'F': 6,
 'G': 7,
 'H': 8,
 'I': 9,
 'K': 10}