Строки и regex в pandas: str-методы

0 задач Pyodide в браузере С эталонными решениями 2026 — с реальных собесов
Грязный текст — половина работы аналитика: телефоны в пяти форматах, email с пробелами, категории то капсом, то строчными. В pandas всё это лечит str-accessor — векторные строковые методы поверх Series. str.lower, str.strip, str.replace приводят к порядку; str.contains('регэксп') фильтрует по паттерну (не забудь na=False, иначе NaN уронит маску); str.extract(r'(\d+)') вытаскивает группы через regex в новые колонки — так парсят домен из email или числа из артикула; str.split с expand=True разбивает строку на несколько колонок. На собесе Сбера или T-Bank дают задачу «нормализуй телефоны» или «достань домен из email» — и ждут, что ты возьмёшь str.extract или str.replace с regex, а не цикл. Важный нюанс: большинство str-методов по умолчанию понимают regex, и с pandas 2.0 в str.replace параметр regex надо задавать явно. Здесь задачи на очистку, поиск по паттерну и извлечение подстрок — с текстовыми датасетами прямо в браузере через Pyodide.
Начать решать задачи →

Все задачи на «pandas-strings» (0)

FAQ: частые вопросы про pandas-strings

Как отфильтровать строки по подстроке или паттерну?

df[df['col'].str.contains('паттерн', na=False)] — оставляет строки, где встречается паттерн (по умолчанию regex). na=False обязателен: без него NaN в колонке даёт NaN в маске и роняет фильтрацию. Для точного совпадения без regex — regex=False. Для регистронезависимого поиска — case=False.

Как достать часть строки через regex в pandas?

str.extract(r'(\d+)') вытаскивает первую группу regex в новую Series. Несколько групп — несколько колонок: str.extract(r'(\w+)@(\w+)') разбивает email на логин и домен. Если совпадений в строке несколько и нужны все — str.extractall. Это векторно и быстрее, чем apply с re.search по каждой строке.

Как нормализовать телефоны или email?

Цепочка str-методов: str.strip() убирает пробелы по краям, str.lower() приводит регистр, str.replace(r'[^0-9]', '', regex=True) выкидывает всё кроме цифр для телефона. Для email — strip + lower обычно достаточно. Ключ: все операции векторные, без циклов, и regex=True задаётся явно в pandas 2.0+.

Почему str.replace не заменяет как ожидалось?

Две частые причины. Первая: в pandas 2.0+ параметр regex по умолчанию False для одиночной строки — если паттерн это regex, нужно regex=True. Вторая: спецсимволы regex ('.', '$', '(') надо экранировать или ставить regex=False для литеральной замены. Проверь, что именно ты заменяешь — литерал или паттерн.

Как разбить строку на несколько колонок?

str.split('разделитель', expand=True) возвращает DataFrame, где каждая часть — отдельная колонка. Например, str.split('-', expand=True) разбивает артикул 'A-123-X' на три колонки. Без expand=True получишь колонку со списками. Ограничить число разбиений — параметр n. Для regex-разделителя добавь regex=True.

Связанные темы Python

Pandas: основы · Pandas groupby · Pandas merge / join · Pandas: временные ряды · NumPy векторизация · scipy: A/B-тесты · sklearn для аналитика · Графики: matplotlib / seaborn

Открыть весь Python-тренажёр (556 задач) →