大熊猫中的read_excel是否有chunksize参数?

Jar*_*fft 6 python pandas tqdm

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

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

for row in tqdm(data_reader,
                total = 200):
    df_list = []
    df_list.append(row)
Run Code Online (Sandbox Code Playgroud)

它将为200个总块中的每1000个块更新进度条。pd.read_excel但是,不再有chunksize争论。还有其他选择吗?

编辑:我已经读过以下问题:重新读取大块的excel文件(使用python读取大xlsx文件的一部分),但是read_excel 不再具有chunksize参数,并且pd.ExcelFile.parse等效。我想知道是否有chunksize参数的替代方法或创建一种可迭代的方法来循环读取大块。

jot*_*tbe 1

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

所以这是计划:基本上使用打开 Excel 文件并将open结果对象传递给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
Run Code Online (Sandbox Code Playgroud)

通过此设置,您有两种可能性:

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

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