Аксессор .str в pandas: строковые операции без цикла

Аксессор .str открывает векторизованные строковые методы для колонки: .str.lower(), .str.contains(), .str.extract(), .str.split(). Они применяются сразу ко всей Series без питоновского цикла — это быстрее и чище, чем apply с обычной функцией. Аналитик использует .str для очистки и парсинга текстовых полей: email, теги, коды.

Синтаксис

df['col'].str.contains('шаблон') | .str.extract(r'(регулярка)')

Примеры использования

Пример 1: Домен из email регуляркой

df['domain'] = df['email'].str.extract(r'@(.+)$')

Результат:

           email     domain
0   anna@mail.ru    mail.ru
1  bob@gmail.com  gmail.com

Пример 2: Фильтр строк, содержащих подстроку

df[df['title'].str.contains('sql', case=False, na=False)]

Результат:

(строки с "sql" в title, регистр не важен)
Порешать Python-задачи в тренажёре →

Типичная ошибка

На колонках с пропусками .str.contains вернёт NaN вместо True/False, и фильтр упадёт — ставь na=False. По умолчанию contains трактует шаблон как регулярное выражение: спецсимволы (. * ( )) надо экранировать или передать regex=False. .str.extract возвращает захваченную группу (то, что в скобках), а без совпадения — NaN.

Где спрашивают на собеседовании

.str-аксессор спрашивают в задачах на парсинг и очистку строк: вытащить домен, разобрать код, отфильтровать по подстроке. На собеседовании ценят предпочтение векторных .str.* методов вместо медленного apply и знание про na=False и регулярки.

FAQ: частые вопросы про .str

Как извлечь часть строки регуляркой в pandas?

df['col'].str.extract(r'(шаблон)') вернёт захваченную группу в новую колонку. Например, .str.extract(r'@(.+)$') достаёт домен после @.

Почему str.contains даёт ошибку на пропусках?

На NaN метод возвращает NaN, а не булево, и булев фильтр ломается. Передай na=False, чтобы пропуски считались как «не содержит».

Чем .str методы лучше apply?

Они векторизованы (работают над всей колонкой в C), поэтому в разы быстрее apply с питоновской функцией и читаются чище. Для строковых операций всегда предпочитай .str.*.

Задачи в тренажёре по теме

Вопросы с собеседований по теме

Смежные темы Python

Pandas: основы · NumPy векторизация

Другие функции pandas

groupby · merge · pivot_table · apply · value_counts · drop_duplicates

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