Python 熊猫数据帧的空间列表理解

Python 熊猫数据帧的空间列表理解,python,pandas,list-comprehension,spacy,Python,Pandas,List Comprehension,Spacy,我有一个数据框,看起来像 Index Text 0 When can I go to Canada? 1 Who is king Arthur? 2 Can you give me the email of Norton? 使用spacy,我试图从数据帧的每一行中提取名称,以便我的输出如下所示 Index Text Name 0 When can I

我有一个数据框,看起来像

Index    Text

0        When can I go to Canada?
1        Who is king Arthur?
2        Can you give me the email of Norton?
使用spacy,我试图从数据帧的每一行中提取名称,以便我的输出如下所示

Index    Text                                     Name

0        When can I go to Canada?                 
1        Who is king Arthur?                      Arthur
2        Can you give me the email of Norton?     Norton
我已经成功地使用了以下代码

df['Name'] = [nlp(x).ents for x in df['Text']]
但它输出各种实体,而不仅仅是名称,例如,我还将“Canada”作为输出,这是我不想要的。所以,我将代码修改为

df['Name'] = [token.label_ for token in nlp(x).ents for x in df['Text']]
但我突然发现了错误

NameError: name 'x' is not defined
为什么列表理解不起作用? 按照此处的代码示例

尝试以下操作

导入空间
nlp=spacy.load(“en_core\u web\u sm”)
def get_人员(文本):
好消息={“人”,“组织”}
doc=nlp(文本)
persons=[如果i.label处于良好状态,则i.text表示文档中的i.ents]
返回人员
df[“name”]=df.apply(lambda x:get_persons(x[“Text”]),axis=1)

请添加所有相关代码以重新发布。
!pip install spacy import spacy nlp=spacy.load('en_core_web_sm')
除了正常的数据帧代码之外,这些是示例中唯一缺少的代码行。您希望每个输入只有一个名称吗?@WiktorStribiżew大多数情况下是的。我对名称感兴趣的唯一原因是因为我想找到包含名称的所有行。0或1。不管是一个还是两个,但在99.9%的情况下,输入都只有一个名字。谢谢@LukasP,它可以工作,但我有一个问题,为什么我只需要搜索“PERSON”时,你还要搜索“ORG”标签?英语的小模型
\u sm
不适合识别人。当我在我的机器上运行它时,它无法捕获诺顿,因为它被标记为一个
ORG
。这与Spacy的演示()是一致的。因此,为了获得您想要的结果,需要使用
ORG
。也许如果你尝试更大的语言模型
\u md
\u lg
,在没有
ORG
的情况下会产生更好的结果。我可以运行大型模型,没有问题。我只是在学习这个,所以用了一个小模型。