Подстрока серии Pandas начинается и заканчивается буквой

#regex #pandas #string #filter

#регулярное выражение #pandas #строка #Фильтр

Вопрос:

У меня есть большая серия pandas, содержащая примерно полмиллиона строк этой формы:

 pd.Series(['Lorem ipsum dolor sit amet',
            'consectetur adipiscing elit',
            'quis euismod mi, id venenatis urna',
            'curabitur vel augue viverra diam imperdiet laoreet'])
  

и я хотел бы отфильтровать серию по словам, которые начинаются и заканчиваются определенной буквой. Например, если начальная буква ‘l’, а конечная буква ‘m’, то я хочу включить строки, которые имеют ‘lorem’ в качестве подстрок, или, скорее, ‘^ l.* m $’.

Итак, мне нужно разделить мою строку на substring и сделать .str.contains(‘^l.* m $’), однако я не знаю оптимизированного способа сделать это.

Комментарии:

1. Вы могли бы сопоставить слова с blw*mb

2. @Thefourthbird, не могли бы вы дать ответ, пожалуйста? Я попробовал s.str.contains(‘ bL w * m b’), и я не получаю никаких совпадений, когда я должен получить строку 0, содержащую Lorem.

3. Попробуйте это так print(s.str.contains(pat = r'bLw*mb', regex = True))

4. @Thefourthbird, это сработало, спасибо. Вы знаете, какова производительность? Мне интересно, как это будет работать для большого набора данных.

5. К сожалению, у меня нет ответа о производительности.

Ответ №1:

Вы можете использовать границы слов, соответствующие от L до m bLw*mb , а между ними — 0 или более символов слова.

 import pandas as pd

s = pd.Series(['Lorem ipsum dolor sit amet',
           'consectetur adipiscing elit',
           'quis euismod mi, id venenatis urna',
           'curabitur vel augue viverra diam imperdiet laoreet'])
s = s.str.contains(pat = r'bLw*mb', regex = True)
print(s)
  

Вывод

 0     True
1    False
2    False
3    False
dtype: bool