【问题标题】:How to label categorical variables in Pandas in order?如何在 Pandas 中按顺序标记分类变量?
【发布时间】:2019-06-04 20:24:21
【问题描述】:

我有一个 pandas 数据框,左边是以下分类变量,右边是它们的具体实现,

(为低分辨率道歉)。

对于统计回归,我想标记所有这些分类变量,例如,LotShapeReg 变为 0IR1 变为 1IR2 2IR33。我发现scikit-learn的LabelEncoder可以做job,但是有问题。其中一些分类变量是隐含的序数,01、... 需要分配给正确的标签,而LotShape 恰好在那里按顺序排列。

所以我的问题是,我如何以我指定的某种顺序有效地标记大量分类变量?

【问题讨论】:

    标签: python pandas machine-learning scikit-learn data-cleaning


    【解决方案1】:

    为此可以使用基本的python函数list.index()

    以 Coolio2654 的回答为例:

    x= ['GA','TA','SA','TA','GA','TA','SA']
    orderlist = ['GA','TA','SA']
    

    使用map函数:

    list(map(lambda a: orderlist.index(a), x))
    

    或列表理解:

    [orderlist.index(a) for a in x]
    

    上述每个的输出是:

    [0, 1, 2, 1, 0, 1, 2]
    

    上面可以放入一个可以为每个分类列调用的函数。

    【讨论】:

      【解决方案2】:

      也许这会有所帮助。

      x= ['GA','TA','SA','TA','GA','TA','SA']
      
      import numpy as np
      from sklearn.preprocessing import LabelEncoder
      from sklearn.preprocessing.label import _encode
      from sklearn.utils import column_or_1d
      x = column_or_1d(x, warn=True)
      classes_,encoded_values = _encode(x,uniques=np.array(['GA','TA','SA']),encode=True)
      encoded_values, classes_
      
      #(array([0, 1, 2, 1, 0, 1, 2]), ['GA', 'TA', 'SA'])
      
      #comparing with labelencoder, which will sort the labels before encoding
      le = LabelEncoder()
      
      le.fit_transform(x),le.classes_
      
      #
      (array([0, 2, 1, 2, 0, 2, 1], dtype=int64),
       array(['GA', 'SA', 'TA'], dtype='<U2'))
      

      【讨论】:

      • 这最终成为了可行的平凡答案。我在这里看到的隐式解决方案是手动指定要在LabelEncoder 内转换的变量的顺序。
      猜你喜欢
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 2022-12-17
      • 2019-07-24
      • 2021-10-31
      • 2020-02-18
      相关资源
      最近更新 更多