使用get_dummies()包含更多列

时间:2018-05-28 12:18:53

标签: python pandas one-hot-encoding

我有以下列表:

vocab = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
list1 = ['a', 'b', 'c', 'd', 'e']
list2 = ['f', 'g', 'h', 'i', 'j']

使用以下代码,我想获得一个编码,为列表1创建一个热门编码,但包含来自词汇的所有项目。

import pandas as pd
encoding1 = pd.get_dummies(data= list1, columns= vocab)
encoding2 = pd.get_dummies(data= list2, columns= vocab)

我想要输出:

encoding1 =      a   b   c   d   e   f   g   h   i   j
              1  1   0   0   0   0   0   0   0   0   0
              2  0   1   0   0   0   0   0   0   0   0 
              3  0   0   1   0   0   0   0   0   0   0
              4  0   0   0   1   0   0   0   0   0   0
              5  0   0   0   0   1   0   0   0   0   0

encoding2 =      a   b   c   d   e   f   g   h   i   j
              1  0   0   0   0   0   1   0   0   0   0
              2  0   0   0   0   0   0   1   0   0   0 
              3  0   0   0   0   0   0   0   1   0   0
              4  0   0   0   0   0   0   0   0   1   0
              5  0   0   0   0   0   0   0   0   0   1

但是,我得到了输出:

encoding1 =      a   b   c   d   e   
              1  1   0   0   0   0  
              2  0   1   0   0   0  
              3  0   0   1   0   0  
              4  0   0   0   1   0   
              5  0   0   0   0   1   

encoding2 =      f   g   h   i   j   
              1  1   0   0   0   0  
              2  0   1   0   0   0  
              3  0   0   1   0   0  
              4  0   0   0   1   0   
              5  0   0   0   0   1  

我该怎么做才能获得所需的输出?

2 个答案:

答案 0 :(得分:0)

尝试将虚拟对象转换为数据框,然后我们将列分配给vocab,然后很多NaN将显示在新列中,然后使用pandas fillna函数进行数据框架和参数我们写0所以它将所有NaN转换为0

encoding1 = pd.get_dummies(data= list1)
encoding2 = pd.get_dummies(data= list2)
df1 = pd.DataFrame(encoding1, columns=vocab)
df2 = pd.DataFrame(encoding2, columns=vocab)
print(df1.fillna(0))
print(df2.fillna(0))

输出:

df1
   a  b  c  d  e    f    g    h    i    j
0  1  0  0  0  0  0.0  0.0  0.0  0.0  0.0
1  0  1  0  0  0  0.0  0.0  0.0  0.0  0.0
2  0  0  1  0  0  0.0  0.0  0.0  0.0  0.0
3  0  0  0  1  0  0.0  0.0  0.0  0.0  0.0
4  0  0  0  0  1  0.0  0.0  0.0  0.0  0.0
df2
     a    b    c    d    e  f  g  h  i  j
0  0.0  0.0  0.0  0.0  0.0  1  0  0  0  0
1  0.0  0.0  0.0  0.0  0.0  0  1  0  0  0
2  0.0  0.0  0.0  0.0  0.0  0  0  1  0  0
3  0.0  0.0  0.0  0.0  0.0  0  0  0  1  0
4  0.0  0.0  0.0  0.0  0.0  0  0  0  0  1

答案 1 :(得分:0)

我会尝试

vocab_dummies = pd.get_dummies(data= vocab)

encoding1 = vocab_dummies.iloc[0:5,:]
encoding2 = vocab_dummies.iloc[5:vocab_dummies.shape[0],:].reset_index(drop=True)

encoding1
Out[67]: 
   a  b  c  d  e  f  g  h  i  j
0  1  0  0  0  0  0  0  0  0  0
1  0  1  0  0  0  0  0  0  0  0
2  0  0  1  0  0  0  0  0  0  0
3  0  0  0  1  0  0  0  0  0  0
4  0  0  0  0  1  0  0  0  0  0

encoding2
Out[68]: 
   a  b  c  d  e  f  g  h  i  j
0  0  0  0  0  0  1  0  0  0  0
1  0  0  0  0  0  0  1  0  0  0
2  0  0  0  0  0  0  0  1  0  0
3  0  0  0  0  0  0  0  0  1  0
4  0  0  0  0  0  0  0  0  0  1