【问题标题】:How to encode dummy variables in Python for sequential data such that the same order is maintained always?如何在 Python 中为顺序数据编码虚拟变量,以便始终保持相同的顺序?
【发布时间】:2020-03-23 13:47:30
【问题描述】:

确实是一个简单的问题,我有一个数据集太大而无法保存在内存中,因此必须加载它然后按顺序对其执行机器学习。我的功能之一是分类的,我想将其转换为虚拟变量,但我有两个问题:

1) 在拼接过程中并非所有类别都存在。所以我想添加额外的类别,即使它们没有出现在当前切片中

2) 列必须保持与以前相同的顺序。



这是问题的一个例子:

In[1]: import pandas as pd
        splice1 = pd.Series(list('bdcccb'))
Out[1]: 0    b
        1    d
        2    c
        3    c
        4    c
        5    b 
        dtype: object

In[2]: splice2 = pd.Series(list('accd'))
Out[2]: 0    a
        1    c
        2    c
        3    d
        dtype: object

In[3]: splice1_dummy = pd.get_dummies(splice1)
Out[3]:     b   c   d
          0 1   0   0
          1 0   0   1
          2 0   1   0
          3 0   1   0
          4 0   1   0
          5 1   0   0

In[4]: splice2_dummy = pd.get_dummies(splice2)
Out[4]:     a   c   d
          0 1   0   0
          1 0   1   0
          2 0   1   0
          3 0   0   1

编辑:如何处理 N-1 规则。必须删除一个虚拟变量,但要删除哪个?每个新拼接都将包含不同的分类变量。

【问题讨论】:

    标签: python sequential one-hot-encoding dummy-variable


    【解决方案1】:

    因此,如果您按照您想要的确切顺序传递类别,get_dummies 无论如何都会保留它。该代码显示了它是如何完成的。

    In[1]: from pandas.api.types import CategoricalDtype
    
           splice1 = pd.Series(list('bdcccb'))
           splice1 = splice1.astype(CategoricalDtype(categories=['a','c','b','d']))
    
           splice2 = pd.Series(list('accd'))
           splice2 = splice2.astype(CategoricalDtype(categories=['a','c','b','d']))
    
    In[2]: splice1_dummy = pd.get_dummies(splice1)
    Out[2]:     a   c   b   d
            0   0   0   1   0
            1   0   0   0   1
            2   0   1   0   0
            3   0   1   0   0
            4   0   1   0   0
            5   0   0   1   0
    
    In[3]:  splice2_dummy = pd.get_dummies(splice2)
    Out[3]:     a   c   b   d
            0   1   0   0   0
            1   0   1   0   0
            2   0   1   0   0
            3   0   0   0   1
    

    虽然,我还没有解决要删除哪个变量的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-01
      • 2018-01-12
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      相关资源
      最近更新 更多