我有以下列表:
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
我该怎么做才能获得所需的输出?
答案 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