【问题标题】:Multi-column label-encoding: Print mappings多列标签编码:打印映射
【发布时间】:2018-12-04 10:57:19
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: pandas encoding label multilabel-classification


    【解决方案1】:

    是的,如果您单独定义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

    【讨论】:

      【解决方案2】:

      我认为transform 987654322 @

      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}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-11-22
        • 2020-07-02
        • 2018-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多