为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕的地8271018 2021-11-02 16:54:45
我想删除 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']我正在寻找的是一种解决方案,我可以只保留出现在肯定列表中的字符串,而不是删除数英里长的否定列表。
查看完整描述

2 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

如果您不坚持使用一行解决方案,您可以将句子分成几部分,只保留有效单词并重新组合在一起:


extract = df['Who'].str.extractall('([^ ]+)')

ok = extract.isin(positive_list)[0].values

df['Who'] =  extract.loc[ok, :].groupby(level=0).agg(' '.join)


查看完整回答
反对 回复 2021-11-02
?
开满天机

TA贡献1786条经验 获得超13个赞

这个解决方案比 Joerg (+1) 的解决方案简洁得多,但对我来说更容易理解(因为我没有关于 extractall pandas 系列函数的先验知识)。它只是在迭代时创建一个新列表并替换旧列表:


import pandas as pd


whoList=['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


查看完整回答
反对 回复 2021-11-02
  • 2 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号