如果子字符串出现在肯定列表中,则将它们保留在 Pandas 中

我想删除 Pandas 数据框中的子字符串,只保留子字符串中出现在 positiv 列表中的那些部分。


我设法反过来做:删除出现在否定列表中的字符串的所有部分。


df['Who'] = ['cute little bear', 'a quick brown fox', 'a bear and a fox']

negative_list = ['cute', 'little', 'a', 'quick', 'brown'. 'and']

positive_list = ['bear', 'fox']


for n in negative_list:

    df['Who'] = d['Who'].str.replace(n, '', re.IRNORECASE)

现在结果将如预期的那样:


df['Who'] = ['bear', 'fox', 'bear fox']

我正在寻找的是一种解决方案,我可以只保留出现在肯定列表中的字符串,而不是删除数英里长的否定列表。


慕的地8271018
浏览 172回答 2
2回答

SMILET

如果您不坚持使用一行解决方案,您可以将句子分成几部分,只保留有效单词并重新组合在一起:extract = df['Who'].str.extractall('([^ ]+)')ok = extract.isin(positive_list)[0].valuesdf['Who'] =  extract.loc[ok, :].groupby(level=0).agg(' '.join)

开满天机

这个解决方案比 Joerg (+1) 的解决方案简洁得多,但对我来说更容易理解(因为我没有关于 extractall pandas 系列函数的先验知识)。它只是在迭代时创建一个新列表并替换旧列表:import pandas as pdwhoList=['cute little bear', 'a quick brown fox', 'a bear and a fox']df=pd.DataFrame({'Who':whoList})positive_list = ['bear', 'fox']newStringList=[]for who in whoList:    newStringList.append('')    for i in positive_list:                if i in who:            newStringList[-1]=newStringList[-1]+i+" "   df['Who']=newStringList
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python