如何对预定义的列进行一次热编码

时间:2019-05-06 11:57:44

标签: python pandas

我想对数据中的一列执行一种热编码。该列可能如下所示:

    app   
0   a       
1   b      
2   c      
3   a    

我已经执行过:

pd.get_dummies(df, columns=['app'])
    app_a   app_b   app_c
0     1        0    0
1     0        1    0
2     0        0    1
3     1        0    0

但是实际上,应用程序列中可以包含'd'值,在我训练的数据中我没有它。因此,我要执行的是在执行app_d之后在数据中不添加'd'值的情况下添加get_dummies

一个热编码可以将我上面的简单数据形成到预定义的列中吗?我想要的是这样的:

 app_a  app_b app_c  app_d
     0    1     0   0    0
     1    0     1   0    0
     2    0     0   1    0
     3    1     0   0    0

1 个答案:

答案 0 :(得分:1)

尝试将列转换为pandas.Categorical dtype并指定categories参数:

df['app'] = pd.Categorical(df['app'], categories=['a', 'b', 'c', 'd'])

pd.get_dummies(df['app'], prefix='app')

[出]

   app_a  app_b  app_c  app_d
0      1      0      0      0
1      0      1      0      0
2      0      0      1      0
3      1      0      0      0

或者,您可以转换为Categorical类型,然后使用cat.add_categories访问器方法在发生以下情况后更新categories

df['app'] = pd.Categorical(df['app'])

df['app'].cat.add_categories(['d'], inplace=True)