#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