2021-11-30 测试通过
非原创,原文来自知乎用户【Python与数据挖掘】,转载备忘
原文链接:https://zhuanlan.zhihu.com/p/403641309
pip install tqdm
或
conda install -c conda-forge tqdm
Jupyter Notebook 记得加感叹号。
from tqdm import tqdm
import time
for i in tqdm(range(20)):
time.sleep(0.2)
也可以直接应用于列表推导:
temp = [time.sleep(0.2) for i in tqdm(range(10))]
利用 tqdm.tqdm,将 for 循环过程中进行迭代的对象简单包裹,就实现了为循环过程添加进度条以及打印执行速度、已运行时间与预估剩余运行时间等实用信息的功能。
针对迭代对象是 range() 的情况,tqdm 还提供了简化版的 trange() 来代替 tqdm(range()):
from tqdm import trange
for i in trange(10):
time.sleep(0.2)
其附带的参数 desc 还可以帮助我们设置进度条的说明文字:
for i in tqdm(range(10), desc='Countdown Status:'):
time.sleep(0.2)
而如果想要在迭代过程中变更说明文字,还可以预先实例化进度条对象,在需要刷新说明文字的时候执行相应的程序:
counter = tqdm(range(10), desc='First description:')
for i in counter:
time.sleep(0.2)
if i==5 :
counter.desc='Second description'
但当迭代的对象长度一开始未知时,譬如对 pandas 中的 DataFrame.itertuples() 进行迭代,我们就只能对其执行速度等信息进行估计,但无法看到进度条递增情况,因为 tqdm 不清楚迭代的终点如何:
import pandas as pd
df = pd.DataFrame({'a':range(10)})
for row in tqdm(df.itertuples()):
time.sleep(0.2)
tqdm 对 jupyter notebook 和 jupyter lab 有着特殊的支持,且使用方法非常简单,只需要将原有的 from tqdm import XXX 的相应功能导入格式修改为 from tqdm.notebook import XXX 就可以了,以 trange 为例:
from tqdm.notebook import trange
for i in trange(10):
time.sleep(0.2)
tqdm 对 pandas 中的 apply() 过程提供了特殊的支持,因为 pandas 中的 apply() 本质上就是串行循环运算,你可以将 pandas 中的任何 apply 操作替换为 progress_apply,并且记住每个单独的 progress_apply 前要先执行 tqdm.pandas(),就像下面的例子一样:
from tqdm.notebook import tqdm
tqdm.pandas(desc='for pandas apply:')
_ = df.progress_apply(lambda _: time.sleep(0.2), axis=1)
通过调用 alive-progress 专门提供的 showtime() 函数可以查看所有可用的动态进度条样式:
alive-progress 貌似更新了,改天再记。
pypi 地址:alive-progress