tqdm: Python中进度条的使用

tqdm的使用

在很多情况下,我们在程序中会遇到循环的代码,此时如果有一个进度条显示,会大幅增加体验,帮助我们了解代码执行的进度。tqdm就是Python中提供的快速、可扩展的进度条,可以在Python的循环中添加进度提示信息。

tqdm需要额外安装:

1
pip install tqdm

基础使用

tqdm的使用非常简单,只需要直接在循环对应的可迭代对象上包装一个tqdm即可:

1
2
3
4
5
6
from tqdm import tqdm
# from tqdm.notebook import tqdm
import time

for i in tqdm(range(100)):
time.sleep(0.1)

tqdm提供了基础和notebook版本的两类进度条,可以通过在import时决定引入那种。notebook版本的进度条更加美观一些,两者的区别如图所示:

定制化使用

同时我们可以通过tqdm对象来控制在进度条中显示不同的信息。例如在下面的代码中,我们希望将epoch、train_loss、eval_loss、acc等信息也显示到进度条中,可以通过tqdm对象提供的两类方法来实现,分别是set_postfixset_description。前者可以传入一个字典,其中的字符会显示在中括号[]之内,后者可以传入一个字符串,其中的内容会显示在进度条之前。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from tqdm.notebook import tqdm
import random
import time

epoch_num = 200
epoch_range_bar = tqdm(range(epoch_num))
for epoch in epoch_range_bar:
time.sleep(0.1)
acc = random.uniform(0., 1.)
train_loss = random.uniform(0, 2)
eval_loss = random.uniform(0, 2)
epoch_range_bar.set_postfix({
'train_loss': round(train_loss, 3),
'eval_loss': round(eval_loss, 3),
'acc': round(acc, 3)
})
epoch_range_bar.set_description(
f"[{epoch + 1}/{epoch_num}]")

上面代码的效果如下所示:

结合pandas

此外,tqdm还可以结合pandas使用。在pandas中,我们经常会调用DataFrame的apply方法,此时使用tqdm我们可以增加对应的进度条显示。使用方式如下:

1
2
3
4
5
6
7
8
import pandas as pd
import numpy as np
from tqdm import tqdm

tqdm.pandas(desc="pandas bar") # 进度条的description

df = pd.DataFrame(np.random.randint(0, 100, (10000000, 6)))
df.progress_apply(lambda x: x**2)

参考文章

  1. python的tqdm模块——进度条配置-腾讯云开发者社区-腾讯云

tqdm: Python中进度条的使用
http://example.com/2024/01/11/tqdm-Python中进度条的使用/
作者
EverNorif
发布于
2024年1月11日
许可协议