#regex #pandas
#регулярное выражение #pandas
Вопрос:
У меня есть следующий фрейм данных в pandas
Date Title
58 March 2015 Data Visualization with JavaScript
63 December 2014 Eloquent JavaScript, 2nd Edition
90 October 2014 If Hemingway Wrote JavaScript
96 December 2014 JavaScript for Kids
158 February 2014 Principles of Object-Oriented JavaScript
209 November 2005 Wicked Cool Java
Я должен отфильтровать строки, в которых содержится слово JavaScript. Я делаю следующее.
category_javascript = np.where(Publisher['Title'].str.contains(r'(?:s|^)JavaScript(?:s|$)'))
Это дает мне следующий результат
category_javascript
Out[106]: (array([ 58, 90, 96, 158], dtype=int64),)
63 December 2014 Eloquent JavaScript, 2nd Edition
Я думаю, он не фильтрует, потому что слово JavaScript имеет запятую после него. Я хочу найти точное слово независимо от знаков препинания или комбинации. например, JavaScript-Book также подойдет.
Пожалуйста, помогите
Ответ №1:
IIUC вам не нужно регулярное выражение, только строка JavaScript
:
category_javascript = np.where(Publisher['Title'].str.contains('JavaScript'))
print (Publisher['Title'].str.contains('JavaScript'))
58 True
63 True
90 True
96 True
158 True
209 False
Name: Title, dtype: bool
print (Publisher[Publisher['Title'].str.contains('JavaScript')])
Date Title
58 March 2015 Data Visualization with JavaScript
63 December 2014 Eloquent JavaScript, 2nd Edition
90 October 2014 If Hemingway Wrote JavaScript
96 December 2014 JavaScript for Kids
158 February 2014 Principles of Object-Oriented JavaScript
Вы можете добавить диакритические знаки в регулярное выражение, например [,;]
:
print (Publisher['Title'].str.contains('(?:s|^|[,;])JavaScript(?:s|$|[,;])'))
58 True
63 True
90 True
96 True
158 True
209 False
Name: Title, dtype: bool
print (Publisher['Title'].str.contains('(?:s|^|[,;])Java(?:s|$|[,;])'))
58 False
63 False
90 False
96 False
158 False
209 True
Name: Title, dtype: bool
Комментарии:
1. Я понял вашу точку зрения. что, если я хочу извлечь word Java? Затем приведенный выше код вернет все строки, включая JavaScript
2. Вы поняли, что я говорю?
3. Да, дайте мне секунду
4. Работает идеально. Большое спасибо 🙂