У меня есть список подстрок (= переменная '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» не имеет конечного пробела, вывод: строки появляются, но строка «время работы от батареи» все еще не совпадает.
Я думаю, как-то должно быть добавлено регулярное выражение, которое заботится об окончании / начале и между пробелами.
Пожалуйста, помогите!