Pandas 在列表中匹配的子字符串上拆分字符串

Pandas 在列表中匹配的子字符串上拆分字符串,pandas,list,split,Pandas,List,Split,对于如何在子字符串与列表中的值匹配的行(而不是数据帧的一部分)中拆分字符串的问题,我一直无法找到答案。换句话说,我需要从一系列行中拆分/提取与动态列表中的任何值匹配的子字符串。关于如何将这些行标记为True/False或如何将匹配项拆分为静态列表,有很多答案,但我一直在尝试将这两个任务合并到一个列表中。任何帮助都将不胜感激 例如: 系列-约翰·多伊先生、简·史密斯女士、世卫组织博士、诺博士、杜立德博士、X先生、蝙蝠侠 清单1-医生、医生 输出-约翰·多伊先生,简·史密斯女士,谁,不,杜立特,X先

对于如何在子字符串与列表中的值匹配的行(而不是数据帧的一部分)中拆分字符串的问题,我一直无法找到答案。换句话说,我需要从一系列行中拆分/提取与动态列表中的任何值匹配的子字符串。关于如何将这些行标记为True/False或如何将匹配项拆分为静态列表,有很多答案,但我一直在尝试将这两个任务合并到一个列表中。任何帮助都将不胜感激

例如: 系列-约翰·多伊先生、简·史密斯女士、世卫组织博士、诺博士、杜立德博士、X先生、蝙蝠侠 清单1-医生、医生

输出-约翰·多伊先生,简·史密斯女士,谁,不,杜立特,X先生,蝙蝠侠

名单2-先生

输出-John Doe、Jane Smith女士、Who博士、No博士、Doolittle博士、X、蝙蝠侠

s = pd.Series('Mr. John Doe, Ms. Jane Smith, Dr. Who, Dr. No, Doctor Doolittle, Mister X, Batman'.split(', '))

你能在你的帖子中加入一个最小的数据集,以及你想要的输出吗?@rahlf23-我刚刚添加了两个简单的示例。非常感谢。必须有一些优雅的东西来解决这个问题。然而,这种解决方案存在一个实际问题。它只从列表中选取第一个值。也就是说,如果上面的列表示例中有一个“Mr”和一个“Mrs”,那么此解决方案将选择Mr并输出值。“Mrs.DoutFire”行条目的“DoutFire”。如果l列表中的字符串包含以下空格,如“Mr.[space]”,则不会有问题。例如,如果我有l=['Mrs.','Mr.','Mister'],我将'Mrs.Doutfire'添加到原始列表中,它会正常工作,从l中删除所有项目,因此输出是['John Doe','Ms.Jane Smith','Dr.Who','Dr.No','Doolittle医生','X','Batman','Doutfire'],确实可以工作,但不幸的是,我对列表条目没有权限。除期末期间外,部分分录与其他分录相似。但无论如何,感谢您提供了一个非常实用的解决方案,该解决方案将在许多其他不太深奥的情况下工作。还有一件可能有帮助的事情是,首先放置较长的匹配字符串,例如:pd.Series['MrJohnDoe','MrsDoubtfire'].str.replace'Mr | Mrs',结果是['JohnDoe','sDoubtfire',但是pd.Series['MrJohnDoe','MrsDoubtfire']str.replace'Mrs | Mr'做了正确的事情['JohnDoe',doutfire']哦,这可能需要一些努力:我想我会从按字符串长度对列表l进行排序开始,以便在列表的前面有更长的匹配项,以便在Mr之前删除Mrs等。在某些情况下,它仍然不起作用,但至少这可能是一个很好的起点
l = ['Dr. ', 'Doctor ']
list(s.str.replace('({})'.format('|'.join(l)), ''))

Out:
['Mr. John Doe',
 'Ms. Jane Smith',
 'Who',
 'No',
 'Doolittle',
 'Mister X',
 'Batman']
l = ['Mr. ', 'Mister ']
list(s.str.replace('({})'.format('|'.join(l)), ''))

Out:
['John Doe',
 'Ms. Jane Smith',
 'Dr. Who',
 'Dr. No',
 'Doctor Doolittle',
 'X',
 'Batman']