在使用 jupyterlab 的 Jupiter 笔记本中使用 read_csv 时如何使用 tqdm 显示进度条
How do I use tqdm to show progress bars when using read_csv in a Jupiter notebook using jupyterlab
我想使用 read_csv 和 pandas 读取一个巨大的 csv,我想显示一个进度条,因为它花费的时间太长了。有没有办法做到这一点?我刚刚看到了带循环的例子。
是的。您可以滥用接受可调用对象并在每一行调用它的任意数量的参数:
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())
但我发现它不太稳定 - 我建议使用基于上下文管理器的方法。
我想使用 read_csv 和 pandas 读取一个巨大的 csv,我想显示一个进度条,因为它花费的时间太长了。有没有办法做到这一点?我刚刚看到了带循环的例子。
是的。您可以滥用接受可调用对象并在每一行调用它的任意数量的参数:
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())
但我发现它不太稳定 - 我建议使用基于上下文管理器的方法。