Как использовать TQDM с пандами в ноутбуке Jupyter?

Я делаю некоторый анализ с пандами в блокноте Jupyter, и, поскольку моя функция применения занимает много времени, я бы хотел видеть индикатор выполнения. В этом посте я обнаружил библиотеку tqdm, которая обеспечивает простой индикатор выполнения операций с пандами. Есть также интеграция Jupyter, которая обеспечивает действительно хороший индикатор выполнения, где сама панель изменяется со временем.

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

import pandas as pd
import numpy as np
from tqdm import tqdm

df = pd.DataFrame(np.random.randint(0, 100, (100000, 6)))

# Register `pandas.progress_apply` and `pandas.Series.map_apply` with `tqdm`
# (can use `tqdm_gui`, `tqdm_notebook`, optional kwargs, etc.)
tqdm.pandas(desc="my bar!")

# Now you can use `progress_apply` instead of `apply`
# and `progress_map` instead of `map`
df.progress_apply(lambda x: x**2)
# can also groupby:
# df.groupby(0).progress_apply(lambda x: x**2)

Там даже написано "можно использовать" tqdm_notebook "", но я не могу найти способ как. Я пробовал несколько вещей, как

tqdm_notebook(tqdm.pandas(desc="my bar!"))

или же

tqdm_notebook.pandas

но они не работают. В определении это выглядит как

tqdm.pandas(tqdm_notebook(desc="my bar!"))

должен работать, но панель не показывает должным образом прогресс, и все еще есть дополнительный вывод.

Есть другие идеи?

5 ответов

Решение

Ты можешь использовать:

tqdm_notebook().pandas(*args, **kwargs)

Это связано с тем, что tqdm_notebook имеет адаптер задержки, поэтому необходимо создать его экземпляр перед доступом к его методам (включая методы класса).

В будущем (>v5.1) вы сможете использовать более унифицированный API:

tqdm_pandas(tqdm_notebook, *args, **kwargs)

Мой рабочий раствор (скопирован из документа):

from tqdm.auto import tqdm
tqdm.pandas()

Я обнаружил, что мне пришлось импортировать tqdm_notebook также. Ниже приведен простой пример, который работает в блокноте Jupyter.

Если вы хотите отобразить функцию на переменную, чтобы создать новую переменную в вашем фрейме данных pandas.

# progress bar
from tqdm import tqdm, tqdm_notebook

# instantiate
tqdm.pandas(tqdm_notebook)

# replace map with proress_map
df['new_variable'] = df['old_variable'].progress_map(some_function)

Если вы хотите использовать более 1 ЦП для этого медленного шага применения, подумайте об использовании Swifter. В качестве бонуса swifter автоматически включает tqdm индикатор выполнения на applyшаг. Чтобы настроить описание панели, используйте df.swifter.progress_bar(enable=True, desc='bar description').apply(...)

      from tqdm.notebook import tqdm

tqdm.pandas()

для версий 4.64.0 и выше.

Другие вопросы по тегам