Короткий ответ
apply(func) применяет переданную функцию к каждому элементу Series (или к каждой строке/столбцу DataFrame), что удобно для простой очистки текста, например df['col'].apply(lambda x: x.strip().lower()).
Как это работает подробнее
для Series apply вызывает функцию поэлементно и собирает результаты в новый Series той же длины; для текстовых операций похожего эффекта часто можно достичь встроенными str-методами (str.strip(), str.lower()), которые работают быстрее за счёт векторизации внутри pandas.
Пример кода
question-115.py
import pandas as pd
df = pd.DataFrame({'name': [' Alice ', 'BOB', None]})
df['name_clean'] = df['name'].apply(lambda x: x.strip().lower() if pd.notna(x) else x)
print(df)Что использовать на практике
- Практика. apply с lambda удобен для нестандартной логики, которую нельзя выразить встроенными методами (например, сложное условное преобразование), но для простых операций (регистр, пробелы, замена) лучше использовать специализированные str-методы, если они покрывают задачу.
- Проверка. первые два значения должны стать 'alice' и 'bob' без пробелов, а пропуск останется пропуском, не вызвав ошибку.
Подводные камни
- Частая ошибка. применяют apply к столбцу с пропусками и падают с ошибкой, потому что lambda вызывает .strip() на NaN (который не является строкой); забывают, что apply возвращает новый Series/DataFrame и не изменяет исходные данные без явного переприсваивания.