web-dev-qa-db-fra.com

Comment utiliser tqdm avec des pandas dans un cahier Jupyter?

Je fais des analyses avec des pandas dans un cahier jupyter et, comme ma fonction d’application prend beaucoup de temps, j'aimerais voir une barre de progression. A travers cet article ici j'ai trouvé la bibliothèque tqdm qui fournit une barre de progression simple pour opérations pandas . Il existe également une intégration Jupyter qui fournit une barre de progression vraiment intéressante dans laquelle la barre elle-même change avec le temps.

Cependant, j'aimerais combiner les deux et je ne comprends pas trop comment faire cela. Prenons juste le même exemple que dans la documentation

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)

Il dit même "peut utiliser 'tqdm_notebook" "mais je ne trouve pas comment. J'ai essayé quelques trucs comme

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

ou

tqdm_notebook.pandas

mais ils ne travaillent pas. Dans le définition il me semble

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

devrait fonctionner, mais la barre ne montre pas correctement les progrès et il y a encore une sortie supplémentaire.

D'autres idées?

12
grinsbaeckchen

Vous pouvez utiliser:

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

C'est parce que tqdm_notebook a un adaptateur de couche, il est donc nécessaire de l'instancier avant d'accéder à ses méthodes (y compris les méthodes de classe).

À l'avenir (> v5.1), vous devriez pouvoir utiliser une API plus uniforme:

tqdm_pandas(tqdm_notebook, *args, **kwargs)
10
gaborous

J'ai trouvé que je devais importer tqdm_notebook également. Vous trouverez ci-dessous un exemple simple qui fonctionne dans le cahier Jupyter.

Si vous voulez mapper une fonction sur une variable pour créer une nouvelle variable dans votre cadre de données 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)
0
mammykins