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