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

时间:2019-02-08 10:33:25

标签: python regex 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']

我正在寻找一种解决方案,我可以仅使字符串出现在肯定列表中,而不删除长度超过英里的否定列表。

2 个答案:

答案 0 :(得分:2)

如果您不坚持采用单行解决方案,则可以将句子分成几部分,只保留有效单词,然后再将它们放在一起:

<script> 
var tacos = ['beef', 'chicken', 'soft', 'hard', 'With nacho cheese']
 _.shuffle([tacos]);
 console.log(_.shuffle(tacos)); 
</script>

答案 1 :(得分:1)

此解决方案比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