如何制作进度条,以便从大型xlsx文件加载pandas DataFrame?

use*_*336 5 python excel pandas tqdm

来自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)
Run Code Online (Sandbox Code Playgroud)

我接受了这段代码并对其进行了编辑,以便从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)
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误,所以我将df.progress_apply更改为:

df.progress_apply(lambda x: x)
Run Code Online (Sandbox Code Playgroud)

这是最终代码:

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)
Run Code Online (Sandbox Code Playgroud)

这会产生一个进度条,但实际上并没有显示任何进度,而是加载进度条,并且当​​操作完成时,它会跳到100%,无法达到目的。

我的问题是:如何使进度条起作用?
progress_apply内部的函数实际上是做什么的?
有没有更好的方法?也许是tqdm的替代品?

任何帮助是极大的赞赏。

小智 9

以下是利用 tqdm 的单行解决方案:

import pandas as pd
from tqdm import tqdm

df = pd.concat([chunk for chunk in tqdm(pd.read_csv(file_name, chunksize=1000), desc='Loading data')])
Run Code Online (Sandbox Code Playgroud)

如果您知道要加载的总行数,则可以将该信息与参数一起添加total到 tqdm 函数,从而产生百分比输出。


roc*_*ker 5

不管用。pd.read_excel阻塞直到文件被读取,并且无法从该函数获取有关其执行过程中进度的信息。

它适用于您可以按块进行的读取操作,例如

chunks = []
for chunk in pd.read_csv(..., chunksize=1000):
    update_progressbar()
    chunks.append(chunk)
Run Code Online (Sandbox Code Playgroud)

但据我所知,tqdm还需要提前知道块的数量,因此对于正确的进度报告,您需要先阅读完整文件....

  • update Progressbar() 是一个函数吗?如果是,我可以用来访问它的库的名称是什么? (2认同)