【问题标题】:Label Encoding for nominal values标称值的标签编码
【发布时间】:2021-09-24 01:59:47
【问题描述】:

我正在研究具有标称列的数据集,即本质上是分类的,有点像这样:

>>>data['MODE'].unique()
array(['A', 'B', 'C'], dtype=object)

我想将这些标称值转换为对应的数值(A-0、B-1、C-2)。我该怎么做?


给出的代码只是为了演示列中存在的类,我需要将整个列转换为序数(即映射 A->0,B->1,C->2)

【问题讨论】:

    标签: python pandas numpy scikit-learn


    【解决方案1】:

    使用factorize:

    a = data['MODE'].unique()
    print (pd.factorize(a)[0])
    [0 1 2]
    
    
    print (dict(zip(a, pd.factorize(a)[0])))
    {'A': 0, 'B': 1, 'C': 2}
    

    或枚举:

    print ({v:k for k, v in dict(enumerate(a)).items()})
    {'A': 0, 'B': 1, 'C': 2}
    

    【讨论】:

    • 可能应该提到我需要为整个专栏这样做
    • @sinha-shaurya - 然后使用data['NEW'] = pd.factorize(data['MODE'])[0]
    • 试图在数据帧的切片副本上设置一个值。尝试使用 .loc[row_indexer,col_indexer] = value 代替,这显然不是一个好主意(不明白为什么),尽管它工作得很好。
    • @sinha-shaurya - 是否有 soem 过滤?在我的解决方案之前像data = data[data['col'] > 0]?如果是,需要data = data[data['col'] > 0].copy() 以避免警告
    • data=X.loc[:,(X.columns!='TYPE')&(X.columns!='ID')] 我正在使用这个。这应该不是问题吧?
    猜你喜欢
    • 2016-08-16
    • 2017-11-11
    • 2022-01-06
    • 2017-03-12
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 2020-04-02
    相关资源
    最近更新 更多