首页 > 解决方案 > 使用 jupyterlab 在 Jupiter notebook 中使用 read_csv 时如何使用 tqdm 显示进度条

问题描述

我想使用 read_csv 和 pandas 读取一个巨大的 csv,并且我想显示一个进度条,因为它花费的时间太长。有没有办法做到这一点?我刚刚看到了带有循环的示例。

标签: pandasjupyter-notebookjupyter-labtqdm

解决方案


是的。您可以滥用任何接受可调用的参数并在每一行调用它:

from tqdm.auto import tqdm

with tqdm() as bar:
    # do not skip any of the rows, but update the progress bar instead
    pd.read_csv('data.csv', skiprows=lambda x: bar.update(1) and False)

如果你使用Linux,你可以获得总行数以获得更有意义的进度条:

from tqdm.auto import tqdm

lines_number = !cat 'data.csv' | wc -l

with tqdm(total=int(lines_number[0])) as bar:
    pd.read_csv('data.csv', skiprows=lambda x: bar.update(1) and False)

但是如果你不喜欢 for 循环,你也可能不喜欢上下文管理器。你可以逃脱:

def none_but_please_show_progress_bar(*args, **kwargs):
    bar = tqdm(*args, **kwargs)

    def checker(x):
        bar.update(1)
        return False

    return checker

pd.read_csv('data.csv', skiprows=none_but_please_show_progress_bar())

但我发现它不太稳定 - 我建议使用基于上下文管理器的方法。


推荐阅读