568просмотров
30.3%от подписчиков
4 марта 2026 г.
Score: 625
🐍 Почему apply() в pandas почти всегда можно заменить (и ускорить код) Многие, кто начинает работать с pandas, пишут так:
import pandas as pd df = pd.DataFrame({ "price": [100, 200, 300], "quantity": [1, 2, 3]
}) # Хотим посчитать выручку
df["revenue"] = df.apply( lambda row: row["price"] row["quantity"], # берём строку axis=1 # применяем к каждой строке
) print(df)
Работает. Но это медленно и не по-питоновски для pandas. В чём проблема? apply(axis=1):
• проходит по строкам в Python-цикле
• ломает векторизацию
• сильно проигрывает по скорости на больших данных
По сути, вы возвращаете себе обычный цикл for. Как правильно?
В pandas почти всегда нужно думать векторно:
# Векторное решение – без apply
df["revenue"] = df["price"] df["quantity"] print(df) Что здесь происходит:
• операции выполняются на уровне массивов (NumPy)
• без Python-циклов
• значительно быстрее на больших объёмах Когда разница становится критичной?
На 1 000 строк – почти незаметно.
На 1 000 000 строк – может отличаться в десятки раз.
Именно поэтому опытные аналитики стараются:
• избегать apply(axis=1)
• использовать встроенные операции
• мыслить колонками, а не строками Когда apply() всё же оправдан?
• если логика действительно сложная
• если нельзя выразить её векторно
• если это прототип, а не продакшен
Но в 80% случаев apply() – это просто привычка. Главное правило
Если в pandas вы пишете apply(axis=1) – сначала подумайте: можно ли это сделать через операции над колонками?
Чаще всего – можно.