処理の進捗を表示

pandasでデータ加工をする時、時間がかかる場合があります。 この時にtqdmを用いて進捗を表示することができます。

Due to popular demand we’ve added support for pandas – here’s an example for DataFrame.progress_apply and DataFrameGroupBy.progress_apply:

import pandas as pd

df = pd.read_csv("../data/sample.csv")[:100]
df.head()
元号和暦西暦人口総数町名
0大正9.01920.0394748A町
1大正9.01920.031421B町
2大正9.01920.0226993C町
3大正9.01920.0253689D町
4大正9.01920.0288602E町

処理の進捗を表示する

rand_with_sleep(x: int)はランダムな時間だけ待機して待機した時間(sec)を返します。

df["人口総数"] には待機した時間が記録され、この処理の進捗のプログレスバーが表示されます。

import numpy as np
from time import sleep
from tqdm import tqdm

tqdm.pandas()


def rand_with_sleep(x: int) -> float:
    rnd = np.random.rand() / 50.0
    sleep(rnd)
    return f"{rnd} sec"


df["人口総数"] = df["人口総数"].progress_apply(lambda x: rand_with_sleep(x))
df.head()
100%|█████████████████████████████████████| 100/100 [00:01<00:00, 78.99it/s]
元号和暦西暦人口総数町名
0大正9.01920.00.00290391291282283 secA町
1大正9.01920.00.015489350572629845 secB町
2大正9.01920.00.007857787674584393 secC町
3大正9.01920.00.016366338258575495 secD町
4大正9.01920.00.017993046099223576 secE町