Как использовать tqdm с pandas в ноутбуке jupyter?
Я делаю анализ с pandas в jupyter-ноутбуке, и поскольку моя функция приложения занимает много времени, мне бы хотелось увидеть индикатор выполнения.
Через этот пост здесь я нашел библиотеку tqdm, которая обеспечивает простой индикатор выполнения для pandas операций.
Существует также интеграция 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!"))
должен работать, но панель не отображает прогресс, и есть еще дополнительный выход.
Любые другие идеи?
Ответы
Ответ 1
Вы можете использовать:
tqdm_notebook().pandas(*args, **kwargs)
Это связано с тем, что tqdm_notebook имеет адаптер-задержка, поэтому перед его доступом (включая методы класса) необходимо инициализировать его.
В будущем ( > v5.1) вы сможете использовать более унифицированный API:
tqdm_pandas(tqdm_notebook, *args, **kwargs)
Ответ 2
Я обнаружил, что мне нужно было импортировать tqdm_notebook
. Ниже приведен простой пример, который работает в блокноте Jupyter.
Если вы хотите отобразить функцию на переменную, чтобы создать новую переменную в вашем фрейме данных pandas.
# progress bar
from tqdm import tqdm, tqdm_notebook
# instantiate
tqdm.pandas(tqdm_notebook)
# replace map with progress_map
# where df is a pandas dataframe
df['new_variable'] = df['old_variable'].progress_map(some_function)
Ответ 3
Мой рабочий раствор (скопирован из документа):
from tqdm.auto import tqdm
tqdm.pandas()