Искал способ получить строковую переменную из строкового столбца в фрейме данных.В самом простом сценарии у меня есть переменная String с именем name, которая разбивается на части по пространству для получения списка строк (в примере с именами).Затем список отправляется в качестве параметра функции для обработки каждого элемента списка:
name = "4 PAWS ONLY"
type(name) #String type
names= name.split()
type(names) #list type
print(names) #['4', 'PAWS', 'ONLY']
#avg_vector needs a list of string, called names
avg_vector = avg_sentence_vector(names, model=word2vec_model, num_features=300, index2word_set=set(word2vec_model.wv.index2word)).tolist()
В этом базовом сценарии avg_sentence_vector выполняется без ошибок, поскольку аргументы удовлетворяют вводу функции.
В идеальном сценарии применяется та же логика, но для каждой строки кадра данных.Строки поступают из столбца с именем «name» (вместо строковой переменной), который нужно разбить на части так же, как и в предыдущем примере, и передать список функции.
До сих пор я не смог получить список строк после разделения значения String из столбца «name»:
names = ['4 PAWS ONLY']
df = pd.DataFrame(data=None, index=range(1), columns=['names', 'avg_vector'])
df['names'] = names
vname = df.names.apply(str)
type(vname) #pandas.core.series.Series
vnames = vname.str.split()
type(vnames) #pandas.core.series.Series
print(vname)
0 [4, PAWS, ONLY]
Name: names, dtype: object
#avg_vector needs a list of string, called vnames
avg_vector = avg_sentence_vector(vnames, model=word2vec_model, num_features=300, index2word_set=set(word2vec_model.wv.index2word)).tolist()
При выполнении функции отображается следующая ошибка:
<ipython-input-9-2abbbce044f5> in avg_sentence_vector(words, model, num_features, index2word_set)
---> 11 if word in index2word_set:
12 nwords = nwords+1
13 featureVec = np.add(featureVec, model[word])
TypeError: unhashable type: 'list'
Тело функции avg_sentence_vector
выглядит следующим образом:
##Get average sentence vector
def avg_sentence_vector(words, model, num_features, index2word_set):
#function to average all words vectors in a given paragraph
featureVec = np.zeros((num_features,), dtype="float32")
nwords = 0
for word in words:
print(word)
print(index2word_set)
if word in index2word_set:
nwords = nwords+1
featureVec = np.add(featureVec, model[word])
if nwords>0:
featureVec = np.divide(featureVec, nwords)
return featureVec
Как передать список строк из столбца строки данных в фрейме?Есть ли другая возможная причина сбоя?
Спасибо