df[df['col'].str.contains('паттерн', na=False)] — оставляет строки, где встречается паттерн (по умолчанию regex). na=False обязателен: без него NaN в колонке даёт NaN в маске и роняет фильтрацию. Для точного совпадения без regex — regex=False. Для регистронезависимого поиска — case=False.
str.extract(r'(\d+)') вытаскивает первую группу regex в новую Series. Несколько групп — несколько колонок: str.extract(r'(\w+)@(\w+)') разбивает email на логин и домен. Если совпадений в строке несколько и нужны все — str.extractall. Это векторно и быстрее, чем apply с re.search по каждой строке.
Цепочка str-методов: str.strip() убирает пробелы по краям, str.lower() приводит регистр, str.replace(r'[^0-9]', '', regex=True) выкидывает всё кроме цифр для телефона. Для email — strip + lower обычно достаточно. Ключ: все операции векторные, без циклов, и regex=True задаётся явно в pandas 2.0+.
Две частые причины. Первая: в 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.
Pandas: основы · Pandas groupby · Pandas merge / join · Pandas: временные ряды · NumPy векторизация · scipy: A/B-тесты · sklearn для аналитика · Графики: matplotlib / seaborn
Открыть весь Python-тренажёр (556 задач) →