Pandas 使用 Spacy 应用两个参数
Pandas apply two argument with Spacy
df.head()
lang text
0 eng Johnnet went out on the field and felt under her feet..
1 eng John was shocked by this statement..
2 de Heute hat Marie köstlich gegessen und..
我有一个包含不同语言的数据框,这就是为什么我有一个包含两种语言的字典 spacy :
eng_nlp= spacy.load('en_core_web_lg')
de_nlp= spacy.load('de_core_news_lg')
spacy_lang = {
'de': de_nlp,
'eng': eng_nlp
}
我写了一个函数,它看起来只显示列中的人,具体取决于语言。
def label_lang(lang,text):
model = spacy_lang[lang]
doc = model(text)
for ent in doc.ents:
if (ent.label_ == 'PERSON'):
return ent.text
现在我想将其应用到列 df['text'],但出现错误
df.apply( lambda x: label_lang(spacy_lang[x],x['text']),axis = 1)
TypeError:无法散列的类型:'Series'
我不明白我应该使用什么作为参数函数(spacy_lang)
x
是一个系列,不是一个字符串,因此你不能使用 spacy_lang[x]
因为这里预期的字典键类型是一个字符串。在这种情况下,您需要在 lambda 中使用 spacy_lang[x['lang']]
而不是 spacy_lang[x]
。
此外,如果在lambda中获取模型,则无需在label_lang
函数中重新尝试获取模型。看,你有 label_lang(spacy_lang[x]....
和 model = spacy_lang[lang]
,其中后者已经在 lang
变量中包含 spacy 模型。
您可以使用
import spacy
import pandas as pd
eng_nlp= spacy.load('en_core_web_lg')
de_nlp= spacy.load('de_core_news_lg')
spacy_lang = {'de': de_nlp,'eng': eng_nlp}
def label_lang(model,text):
doc = model(text)
for ent in doc.ents:
if (ent.label_ == 'PERSON'):
return ent.text
df = pd.DataFrame({'lang': ['eng','eng', 'de'], 'text':[
'Johnnet went out on the field and felt under her feet..',
'John was shocked by this statement..',
'Heute hat Marie köstlich gegessen und']})
print(df.apply( lambda x: label_lang(spacy_lang[x['lang']],x['text']),axis = 1))
输出:
0 None
1 John
2 None
df.head()
lang text
0 eng Johnnet went out on the field and felt under her feet..
1 eng John was shocked by this statement..
2 de Heute hat Marie köstlich gegessen und..
我有一个包含不同语言的数据框,这就是为什么我有一个包含两种语言的字典 spacy :
eng_nlp= spacy.load('en_core_web_lg')
de_nlp= spacy.load('de_core_news_lg')
spacy_lang = {
'de': de_nlp,
'eng': eng_nlp
}
我写了一个函数,它看起来只显示列中的人,具体取决于语言。
def label_lang(lang,text):
model = spacy_lang[lang]
doc = model(text)
for ent in doc.ents:
if (ent.label_ == 'PERSON'):
return ent.text
现在我想将其应用到列 df['text'],但出现错误
df.apply( lambda x: label_lang(spacy_lang[x],x['text']),axis = 1)
TypeError:无法散列的类型:'Series'
我不明白我应该使用什么作为参数函数(spacy_lang)
x
是一个系列,不是一个字符串,因此你不能使用 spacy_lang[x]
因为这里预期的字典键类型是一个字符串。在这种情况下,您需要在 lambda 中使用 spacy_lang[x['lang']]
而不是 spacy_lang[x]
。
此外,如果在lambda中获取模型,则无需在label_lang
函数中重新尝试获取模型。看,你有 label_lang(spacy_lang[x]....
和 model = spacy_lang[lang]
,其中后者已经在 lang
变量中包含 spacy 模型。
您可以使用
import spacy
import pandas as pd
eng_nlp= spacy.load('en_core_web_lg')
de_nlp= spacy.load('de_core_news_lg')
spacy_lang = {'de': de_nlp,'eng': eng_nlp}
def label_lang(model,text):
doc = model(text)
for ent in doc.ents:
if (ent.label_ == 'PERSON'):
return ent.text
df = pd.DataFrame({'lang': ['eng','eng', 'de'], 'text':[
'Johnnet went out on the field and felt under her feet..',
'John was shocked by this statement..',
'Heute hat Marie köstlich gegessen und']})
print(df.apply( lambda x: label_lang(spacy_lang[x['lang']],x['text']),axis = 1))
输出:
0 None
1 John
2 None