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) – сначала подумайте: можно ли это сделать через операции над колонками? Чаще всего – можно.
568
просмотров
1569
символов
Нет
эмодзи
Нет
медиа

Другие посты @phytonrepoz

Все посты канала →
🐍 Почему apply() в pandas почти всегда можно заменить (и ус — @phytonrepoz | PostSniper