使用 jupyterlab 在 Jupiter 笔记本中使用 read_csv 时如何使用 tqdm 显示进度条

Posted

技术标签:

【中文标题】使用 jupyterlab 在 Jupiter 笔记本中使用 read_csv 时如何使用 tqdm 显示进度条【英文标题】:How do I use tqdm to show progress bars when using read_csv in a Jupiter notebook using jupyterlab 【发布时间】:2021-07-03 02:54:04 【问题描述】:

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

【问题讨论】:

使用循环有什么问题? 我通常不需要循环来使用 read_csv。我找到了一种使用块的方法。 【参考方案1】:

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

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())

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

【讨论】:

第一种方法我得到: HBox(children=(FloatProgress(value=1.0, bar_style='info', max=1.0), html(value=''))) 但没有进度条.最后一种方法只是重新启动我的内核。 这意味着您尚未安装在 JupyterLab 笔记本中启用小部件(包括漂亮的 tqdm 栏)的扩展。对于 JupyterLab 3.0,只需执行 pip install ipywidgets 并重新启动 JupyterLab(请参阅 ***.com/questions/57343134/…)。 我说过我不推荐最后一种方法 ;) 但是说真的,如果这会导致内核重新启动,那就是一个错误,如果你能报告这将非常有帮助(对你自己和其他人)它到你使用的内核的存储库。 如果你不能让漂亮的小部件工作,你总是可以使用from tqdm import tqdm而不是from tqdm.auto import tqdm

以上是关于使用 jupyterlab 在 Jupiter 笔记本中使用 read_csv 时如何使用 tqdm 显示进度条的主要内容,如果未能解决你的问题,请参考以下文章

Jetson Nano开机启动JupyterLab

Junit-jupiter-api 和 junit-jupiter-engine 的区别

Jupiter代码审查工具使用参考

Jupiter Code Review Reference -- Jupiter代码审查工具使用参考

jupyterlab 交互式绘图

使用 vim 键绑定在 JupyterLab 中退出插入模式