Сохранение подстрок в Pandas, если они появляются в положительном списке - PullRequest
0 голосов
/ 08 февраля 2019

Я хочу удалить подстроку в фрейме данных 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']

То, что я ищу, - это решение, в котором я могу сохранить только строки, появляющиеся вположительный список вместо удаления отрицательного списка, длина которого будет превышать мили.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Это решение гораздо менее лаконично, чем решение от Йерга (+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
0 голосов
/ 08 февраля 2019

Если вы не настаиваете на однострочном решении, вы можете разбить предложения на части, оставьте только правильные слова и снова соедините все вместе:

extract = df['Who'].str.extractall('([^ ]+)')
ok = extract.isin(positive_list)[0].values
df['Who'] =  extract.loc[ok, :].groupby(level=0).agg(' '.join)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...