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.0 | 1920.0 | 394748 | A町 |
1 | 大正 | 9.0 | 1920.0 | 31421 | B町 |
2 | 大正 | 9.0 | 1920.0 | 226993 | C町 |
3 | 大正 | 9.0 | 1920.0 | 253689 | D町 |
4 | 大正 | 9.0 | 1920.0 | 288602 | E町 |
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.0 | 1920.0 | 0.00290391291282283 sec | A町 |
1 | 大正 | 9.0 | 1920.0 | 0.015489350572629845 sec | B町 |
2 | 大正 | 9.0 | 1920.0 | 0.007857787674584393 sec | C町 |
3 | 大正 | 9.0 | 1920.0 | 0.016366338258575495 sec | D町 |
4 | 大正 | 9.0 | 1920.0 | 0.017993046099223576 sec | E町 |