将单词向量添加为pandas数据框中的列?

时间:2018-07-11 18:59:39

标签: python-3.x pandas gensim word2vec

我的数据框的列为keywords

keywords
election
countries
majestic
dollar
....
....
...

我还使用gensim建立了自己的预训练word2vec模型,从中可以使用model['anyword']为每个单词获取20个维向量。我的问题是

i)我想将这20个维向量分配为与每个关键字相对应的列名(V1至V20)。

ii)如果单词词汇中不存在该单词,那么我想将向量分配为对应于该单词的[0,0,0 ,,,,, 0]数组,否则它将给出一个error:word not present in vocabulary 。例如,如果单词majestic不存在于词汇中,则df会希望

keyword     V1     V2      V3 ............. V20
election   0.02    0.44    0.32.............0.12
countries  0.33    0.33    0.11............ 0.13
majestic   0       0       0   ............ 0
dollar     0.31    0.77    0.86............ 0.91
.......
.......

到目前为止我所做的:-

for i in df['keywords']:
    vectors=model['i']

我得到了向量数组,但我没有得到如何在V1 V2 V3 V4....V20中将列名设为df以及如何将丢失的单词视为'0'

1 个答案:

答案 0 :(得分:2)

您可以像下面的代码一样执行此操作。 首先使函数成为这样。对于单词不在词汇表中,我使用了try-except,因此,如果单词不在词汇表中,则会在列表中放置0。

missing=[0]*20
def fun(key):
    try:
        return(model[key])
    except:
        return(missing)

然后调用此函数:

df['vector'] = df['keywords'].apply(fun)
df = pd.DataFrame(df['vector'].values.tolist())

我希望这会对您有所帮助。