Поиск нескольких подстрок с помощью OR в столбце DF - PullRequest
0 голосов
/ 15 июня 2019

У меня есть список подстрок (= переменная 'searchfor'), которые я хочу использовать для поиска и замены в столбце DF, значение ячейки.

Я хочу найти и заменить все вхождения.

пример: допустим, значение моей ячейки DF выглядит следующим образом: «Отличный сенсорный экран и приятно держать»

и мой список 'searchfor' = ['Время автономной работы отличное', 'приятно держать']

поэтому я хочу выводить как: где бы ни одна из этих строк присутствовала в строке (логика ИЛИ), эти строки DF должны появляться.

Я мог бы сделать это в python через однострочный итератор, например itertuples, затем внутри каждого экземпляра строки получить значения соответствующих ячеек и использовать выражения if else и regex.

Но можем ли мы сделать это без использования итератора строк? (например, напрямую, используя списочные выражения с выражениями регулярных выражений?)

Я преобразовал список 'searchfor' в нижний для правильного соответствия

searchfor=[x.lower() for x in searchfor]

Я нашел эту ссылку '|' .join (searchfor) снизу: Python сопоставляет строку одного столбца с подстрокой другого столбца И я думаю, что это приближает меня к выполнению работы (поэтому было бы неплохо, если бы мы могли сохранить это!)

      #The DF which I am using for this is as below
DF= pd.DataFrame(
    {'ID':[0,1,2],
     'ReviewText':
         [ '  Battery life is great and '
          ,' works well for the need i have for it! '
          ,' Great touchscreen and  nice to hold']
     },
    index=[0,1,2])
#   ID                                ReviewText
#0   0                Battery life is great and 
#1   1   works well for the need i have for it! 
#2   2       Great touchscreen and  nice to hold

# Notice the ending spaces in reviewtext column elements.

# the searchfor list is as below
searchfor = [' Battery life is great ' ,' nice to hold ' ]

#finally I tried something like this :

DF.loc[DF.ReviewText.str.lower().str.contains('|'.join(searchfor)), :]

Ожидаемый ответ: 1-й и 3-й должны совпадать и должны появиться в результате.

Попытка 1: когда слово 'hold' из списка 'searchfor' имеет конечный пробел, вывод будет пустым DF (он ничего не соответствует)

searchfor = ['Battery life is great ' ,' nice to hold ' ]
DF.loc[DF.ReviewText.str.lower().str.contains('|'.join(searchfor)), :]
#Empty DataFrame
#Columns: [ID, ReviewText]
#Index: []

Попытка 2: когда слово «hold» слова «searchfor» не имеет конечного пробела, вывод: строки появляются, но строка «время работы от батареи» все еще не совпадает.

Я думаю, как-то должно быть добавлено регулярное выражение, которое заботится об окончании / начале и между пробелами.

Пожалуйста, помогите!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...