我正在jupyter笔记本中运行以下代码,该代码检查nametest_df['text']
中的文本字符串并返回人员名称。我设法解决了这个问题,并希望将这些名称推到nametest_df['name']
内的各个字段中,当前所有值均为NaN
。
我尝试了Series.replace()
方法,但是“名称”列中的所有条目都显示相同的名称。
有什么线索可以有效地做到这一点吗?
for word in nametest_df['text']:
for sent in nltk.sent_tokenize(word):
tokens = nltk.tokenize.word_tokenize(sent)
tags = st.tag(tokens)
for tag in tags:
if tag[1]=='PERSON':
name = tag[0]
print(name)
nametest_df.name = nametest_df.name.replace({"NaN": name})
样品名称test_df
**text** **name**
0 His name is John NaN
1 I went to the beach NaN
2 My friend is called Fred NaN
预期产量
**text** **name**
0 His name is John John
1 I went to the beach NaN
2 My friend is called Fred Fred
答案 0 :(得分:1)
请勿尝试一一填写序列值。这是低效率的,容易出错。一个更好的主意是创建一个名称的列表并直接分配。
L = []
for word in nametest_df['text']:
for sent in nltk.sent_tokenize(word):
tokens = nltk.tokenize.word_tokenize(sent)
tags = st.tag(tokens)
for tag in tags:
if tag[1]=='PERSON':
L.append(tag[0])
nametest_df.loc[nametest_df['name'].isnull(), 'name'] = L