python - Pandas 中的 read_excel 是否有 block 大小参数?

标签 python pandas tqdm

<分区>

我正在尝试创建一个进度条,以便使用 tqdm 将 excel 数据读入 pandas。我可以像这样使用 chunksize 参数使用 csv 轻松地做到这一点:

data_reader = pd.read_csv(path,
                          chunksize = 1000)

for row in tqdm(data_reader,
                total = 200):
    df_list = []
    df_list.append(row)

它会为 200 个总 block 中的每 1000 个 block 更新进度条。但是,pd.read_excel 不再有 chunksize 参数。有替代方案吗?

编辑:我读过问题 re: reading an excel file in chunks ( Reading a portion of a large xlsx file with python ),然而,read_excel 不再有 chunksize 参数和 pd.ExcelFile。 parse 是等价的。我想知道是否有 chunksize 参数的替代方法或另一种方法来创建可迭代对象以在读取 block 时循环 block 。

最佳答案

如果你想添加一个进度指示器,你可以使用文件对象的.tell()方法。这当然不太准确,但也许它可以让您的用户足够准确地估计他们可以喝多长时间的咖啡:-)

计划如下:基本上使用open 打开您的excel 文件并将结果对象传递给pd.read_excel。根据文档,这应该是可能的,我只是用一个 xlsx 文件的简单示例验证了它。

开始时,您评估文件的大小。例如:

import io
fp.seek(0, io.SEEK_END) # set the file cursor to the end of the file
fp_len= fp.tell()
fp.seek(0, io.SEEK_SET) # set the file cursor back to the beginning of the file

使用此设置,您有两种可能性:

  1. 要么创建一个线程,通过在文件对象上调用 fp.tell() 不时更新进度条,您为 xlsx 文件打开,或者
  2. 创建自己的包装器,提供方法,pandas 需要读取数据(至少一个 read 方法)并同步更新进度条,因此您不需要额外的线程。您的类只需要将方法调用传递给实际的文件类。从这个意义上说,您可以将它与代理对象进行比较。

我不得不承认,2 有点脏。但我确信这两种方法都有效,因为我刚刚验证过,pd.read_excel 确实可以从文件对象 (io.BufferedReader) 以及 xlsx 文件中读取,这是 afaik 压缩文件。这种方法不会那么准确,因为文件指针可能不会随时间线性移动,具体取决于压缩率的波动(文件的某些部分可能比其他部分以更高的速率压缩)。

关于python - Pandas 中的 read_excel 是否有 block 大小参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44764892/

相关文章:

python - 显示 Python 中底层 C++ 进程的进度

python - tqdm.notebook 在 jupyter notebook 中显示带有 "HBox"而不是进度条的消息

python - 将 tqdm 进度条与 asyncio 结合使用

python - 写入和读取 csv 文件时出现特殊字符 (\r) 问题

python - 在另一个 csv 文件中查找一个 csv 文件的值,使用第三个 csv 文件作为映射

python - 根据每行中的值获取列标题

python - 多对一关系返回无对象 : SqlAlchemy

python - 尝试加载 matplotlib 时 iPython notebook 出错

python - 在 Python 中打开 Alteryx .yxdb 文件?

python - 找到对应的列号到最大值