2017-04-13 80 views
0

使用循环工作逐行执行此函数。使用pandas.DataFrame.apply执行相同的函数返回ValueError:操作数不能与形状一起广播。 pandas.DataFrame.apply应该工作吗?如果这是不容易解释的事情之一,有关如何加速处理(除了多处理)的任何想法?pandas.DataFrame.apply ValueError:操作数无法与形状一起广播

#python 3.6 
import pandas as pd # version 0.19.2 
import numpy as np # 
#gensim version 1.0.1 
from gensim import models #https://radimrehurek.com/gensim/models/word2vec.html 

df=pd.DataFrame({"q1":[['how', 'I', 'from', 'iPhone', 'keep', 'them', 'my', 'but', 'delete', 'iCloud', 'photos', 'in', 'can'], 
        ['use', 'are', 'radio', 'What', 'commercial', 'cognitive', 'technology', 'in'], 
        ['how', 'I', 'razor', 'prevent', 'burns', 'the', 'stomach', 'on', 'can']], 
      "q2":[['Can', 'remove', 'from', 'I', 'iPhone', 'removing', 'them', 'my', 'storage', 'photos', 'iCloud', 'without'], 
        ['radio', 'from', 'Where', 'do', 'come', 'cognitive', 'distinction'], 
        ['how', 'I', 'razor', 'prevent', 'can', 'burn']]}) 

#using pretrained model https://code.google.com/archive/p/word2vec/ 
w2v = models.KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True) 

#This works 
df['w2v_sim']=np.nan 
for i in range(len(df)):  
df['w2v_sim'].ix[i]=w2v.n_similarity(df['q1'].ix[i],df['q2'].ix[i]) 
print(str(df['w2v_sim'].ix[i])) 

#this doesn't work 
df['w2v_sim']=np.nan 
df['w2v_sim']=df.apply(w2v.n_similarity(df['q1'],df['q2']),axis=1) 

ValueError异常:操作数无法与形状(13300)一起广播(8300)

谢谢

回答

0

这是难以复制考虑预训练的模型是1.5 GB,但我认为这是因为您的应用程序,其中 - 在axis = 1时调用 - 通过将函数逐行应用于数据框来工作。所以它应该只有一个参数(行,这是一个系列)。试试这个:

df['w2v_sim']=df.apply(lambda x: w2v.n_similarity(x.q1, x.q2), axis=1) 
+0

没有错误(它的工作)。非常感谢。 –

相关问题