Прогресс-индикатор операций Pandas: группировка и apply()

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы следить за выполнением операций в Pandas, используется библиотека tqdm, создающая адаптивные индикаторы прогресса. Прежде всего, необходимо установить tqdm, выполнив pip install tqdm. После этого вы сможете применять метод .progress_apply() вместо обычных вызовов apply():

Python
Скопировать код
from tqdm.auto import tqdm
tqdm.pandas()

df['processed'] = df['column'].progress_apply(your_function)  # Отслеживание прогресса в работе!

Таким образом, вы включаете визуализацию процесса выполнения операций с данными.

Кинга Идем в IT: пошаговый план для смены профессии

Работа с tqdm и pandas

Индикатор прогресса для операций Groupby

Возможно прозрачное выполнение операций groupby с контролем через tqdm:

Python
Скопировать код
df.groupby('category').progress_apply(your_group_function) # Мониторинг группировки в реальном времени

Преобразование данных с мониторингом прогресса

Преобразуйте данные и сразу наблюдайте за ходом процесса:

Python
Скопировать код
df.progress_transform(your_transform_function) # Отслеживание трансформации данных "на лету"

Индикатор прогресса для пользовательских операций

tqdm позволяет отслеживать каждый этап выполнения сложных операций:

Python
Скопировать код
with tqdm(total=df.shape[0]) as pbar:
    for index, row in df.iterrows():
        # Выполняется ваша сложная операция. Начало.
        pbar.update(1) # Обновление состояния индикатора прогресса. Этап завершён!

Продвинутое мониторинг прогресса с помощью tqdm

Ускорение операций с использованием многопоточности

Улучшить производительность и одновременно получать информацию о прогрессе выполнения позволяет многопоточность:

Python
Скопировать код
from pandarallel import pandarallel
from tqdm.auto import tqdm
pandarallel.initialize(progress_bar=True)
tqdm.pandas()

def parallel_function(row):
    return your_computation(row) # Заклинание параллельных вычислений

df.parallel_apply(parallel_function, axis=1) # Добро пожаловать в многомерное пространство.

Интерактивные индикаторы прогресса в Jupyter Notebook

Сделайте свой блокнот в Jupyter более информативным, используя интерактивные индикаторы прогресса:

Python
Скопировать код
from tqdm.notebook import tqdm as tqdm_notebook
tqdm_notebook.pandas()

df['result'] = df['data'].progress_apply(your_function) # Визуализация ваших вычислений.

Отслеживание прогресса в реальном времени с использованием логирования

Получайте свежие данные о ходе выполнения операций, воспользуйтесь системой логирования:

Python
Скопировать код
import logging
from tqdm.auto import tqdm
tqdm.pandas(logger=logging.getLogger(__name__))

def logging_decorator(func):
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        logging.info(f"Обработано: {tqdm.pandas().n}/{tqdm.pandas().total}") # Статистика в режиме реального времени
        return result
    return wrapper

@logging_decorator
def your_process_function():
    # Реализация функции здесь
    pass

df['processed'] = df['data'].progress_apply(your_process_function) # Мониторинг прогресса в работе.

Визуализация

Представьте работу с индикаторами прогресса в pandas, как работу панды:

Markdown
Скопировать код
Визуализируйте, как панда ест бамбук. 🐼🍽️
plaintext
Скопировать код
У нас есть голодная панда и кучка бамбука [════════] 0%
Python
Скопировать код
while munching():
    update_progress_bar()  # Панда активно пережевывает данные, индикатор прогресса заполняется.
plaintext
Скопировать код
Процесс поедания бамбука продолжается [=====>   ] 50%
plaintext
Скопировать код
Бамбук съеден: панда довольна [========] 100% 🌟

Воспринимайте каждый укус панды как обработку очередного фрагмента данных pandas, а индикатор прогресса демонстрирует, насколько продвинулся процесс.

Нюансы установки и совместимости

Установка tqdm

Для оптимальной работы tqdm убедитесь, что вы используете последнюю его версию:

shell
Скопировать код
pip install "tqdm>=4.9.0"

Если версия tqdm, установленная у вас, старше 4.8, то вместо tqdm.pandas() следует использовать tqdm_pandas(tqdm()).

Совместимость версий

Чтобы оставаться в курсе последних обновлений, следите за версиями pandas и tqdm:

Python
Скопировать код
import pandas as pd
import tqdm

print(pd.__version__)
print(tqdm.__version__)

Решение возможных проблем при работе с pandas

Работа с большими наборами данных

Очень большие объемы данных могут замедлить работу progress_apply. В таком случае вы можете:

  • Разделить датасет на более мелкие части.
  • Использовать Dask для распределенных вычислений с информированием о прогрессе.
  • Оптимизировать функции, которые вы применяете к фреймам данных.

Поддержка графических интерфейсов

Если вы работаете в графической оболочке типа SageMaker, вам может пригодиться tqdm.gui.

Автоматизация импорта

tqdm.auto автоматически адаптирует импорт для файлов .py и .ipynb.

Полезные материалы

  1. tqdm.tqdm – документация tqdm
  2. GitHub – tqdm/tqdm: Индикатор прогресса для Python и CLI
  3. Stack Overflow – Индикатор прогресса при работе с pandas
  4. PyPI – tqdm
  5. Улучшение производительности — документация pandas 2.2.0
  6. PythonSpeed/PerformanceTips – Вики Python