Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果子字符串出现在肯定列表中,则将其保留在熊猫中_Python_Regex_Pandas - Fatal编程技术网

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

Python 如果子字符串出现在肯定列表中,则将其保留在熊猫中,python,regex,pandas,Python,Regex,Pandas,我想删除pandas数据帧中的一个子字符串,并只保留该子字符串中出现在正列表中的部分 我设法用另一种方法:删除字符串中出现在否定列表中的所有部分 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

我想删除pandas数据帧中的一个子字符串,并只保留该子字符串中出现在正列表中的部分

我设法用另一种方法:删除字符串中出现在否定列表中的所有部分

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']

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

如果你不坚持一行解决方案,你可以将句子分成几个部分,只保留有效的单词,然后重新组合:

extract = df['Who'].str.extractall('([^ ]+)')
ok = extract.isin(positive_list)[0].values
df['Who'] =  extract.loc[ok, :].groupby(level=0).agg(' '.join)

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

extract = df['Who'].str.extractall('([^ ]+)')
ok = extract.isin(positive_list)[0].values
df['Who'] =  extract.loc[ok, :].groupby(level=0).agg(' '.join)

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

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

那么
df['Who']=df['Who'].str.extract(r“\b({})\b.format(“|”).join(positive_list)),flags=re.I)
呢?所有的
positive_list
项目都是字母数字吗?那么
df['Who']=df['Who'].str.extract(r“\b({})\b.format(“|”。.join(positive_list)),flags=re.I)
?所有的
肯定列表
项目都是字母数字吗?