如何从数据框而不是单个列表中求值句子?



那么,我现在有了这样的代码:

import pandas as pd
diccionario = pd.read_csv(dict, header=0).set_index("nombre")["valor"].to_dict()
lista = ["felicidad", "paz", "día", "estoy", "isla", "alivio", "-"]
print(sum([diccionario[i] for i in lista if i in diccionario]))

让我可以比较"列表"使用key:value字典(dictionario),得到结果8

但是,现在我想读"lista"同样从同一个谷歌表,为了能够添加更多的列表。

所以,我在这里添加了新的列表:

b = f"https://docs.google.com/spreadsheets/d/1-odw996EIUB9mo2Ad1fNh0y9QiXv7GU81COMj6g1Z-A/gviz/tq?tqx=out:csv&sheet=b"

并读取

import pandas as pd
text = pd.read_csv(b, header=0)

然后,我用NLTK

标记短语
regexp = RegexpTokenizer('w+')
text['text_token']=text['frases'].apply(regexp.tokenize)

但是,一旦我使用相同的代码,我就不会收到包含每个短语求值的新列

text['suma']=(diccionariob[diccionariob['nombre'].isin(text['frases'])]['valor'].sum())
print(sum([diccionario[i] for i in lista if i in diccionario]))

结果都是0

<表类>远期text_tokensumahola la casa es bonita paz, felicidad[hola, la, casa, es, bonita, paz, felicidad]0pasos de gigante feliz alegria major paz[pasos, de, gigante, feliz, alegria, major]0是很好巴斯(是,是,好,巴斯)0木栅felicidad巴斯[felicidad木栅,巴斯]0

您可以尝试将您的第一个方法包装到lambda函数中(假设您在名为diccionariob的字典中有所有标记化的单词)

#pass dictionary and the tokenized list as parameters
def somma(dictionary, lista):
somma = sum([dictionary[i] for i in lista if i in dictionary])
return somma
#apply the function to each row of the dataframe
text['suma']= text.apply(lambda x: somma(diccionariob, x['frases']), axis=1)

最新更新