https://pypi.org/project/tqdm/:
import pandas as pd
import numpy as np
from tqdm import tqdm
df = pd.DataFrame(np.random.randint(0, 100, (100000, 6)))
tqdm.pandas(desc="my bar!")p`
df.progress_apply(lambda x: x**2)
我使用了这段代码并对其进行了编辑,以便从load_excel创建DataFrame,而不是使用随机数:
import pandas as pd
from tqdm import tqdm
import numpy as np
filename="huge_file.xlsx"
df = pd.DataFrame(pd.read_excel(filename))
tqdm.pandas()
df.progress_apply(lambda x: x**2)
这给了我一个错误,所以我把df.progress_apply改为:
df.progress_apply(lambda x: x)
下面是最终代码:
import pandas as pd
from tqdm import tqdm
import numpy as np
filename="huge_file.xlsx"
df = pd.DataFrame(pd.read_excel(filename))
tqdm.pandas()
df.progress_apply(lambda x: x)
这会产生一个进度条,但它实际上并不显示任何进度,而是加载进度条,当操作完成时,它会跳到100%,这违背了目的。
我的问题是:如何使此进度条工作?
progress_apply中的函数实际上是做什么的?
有没有更好的方法?也许可以替代tqdm?
任何帮助都非常感谢。
6条答案
按热度按时间rqcrx0a61#
在文件被读取之前,
pd.read_excel
块不会工作,并且没有办法从这个函数中获得有关其执行过程的信息。它将适用于读操作,您可以按块方式执行,如
但是据我所知,
tqdm
也需要提前知道块的数量,所以要想得到一个正确的进度报告,你需要先读完整的文件。js81xvg62#
下面是一个利用tqdm的一行程序解决方案:
如果您知道要加载的总行数,则可以使用参数
total
将该信息添加到tqdm函数中,从而获得百分比输出。ffx8fchx3#
这可能会对有类似问题的人有所帮助。here您可以获得帮助
例如:
slhcrj9b4#
**免责声明:**此功能仅适用于
xlrd
引擎,未经全面测试!**它是如何工作的?**我们的monkey-patch
xlrd.xlsx.X12Sheet.own_process_stream
方法负责从文件流加载工作表。我们提供自己的流,其中包含我们的进度条。每个工作表都有自己的进度条。当我们需要进度条时,我们使用
load_with_progressbar()
上下文管理器,然后执行pd.read_excel('<FILE.xlsx>')
。进度条截图:
rqmkfv5c5#
j9per5c46#
这是基于许多以前的回应的建议。我使用它来加载一个包含注解行(#)的大TSV。它用百分比值更新tqdm进度条。