pandas中的read_excel函数有没有chunksize参数?

10 浏览
0 Comments

pandas中的read_excel函数有没有chunksize参数?

我正在尝试使用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)

上述代码将在每个1000个数据块中更新进度条,总共有200个数据块。然而,pd.read_excel不再具有chunksize参数。是否有替代方案?

编辑:我已经阅读了关于以块读取Excel文件的问题(Reading a portion of a large xlsx file with python),然而,read_excel不再具有chunksize参数,而pd.ExcelFile.parse相当于它。我想知道是否有chunksize参数的替代方案或其他方法可以在读取数据块时创建可迭代对象以进行循环。

0
0 Comments

在pandas中,使用read_excel函数读取Excel文件时,不支持像read_csv函数那样的chunksize参数,该参数可以控制一次读取的数据块大小。这意味着当读取大型Excel文件时,整个文件将一次性加载到内存中,这可能会导致内存不足的问题。

为了解决这个问题,可以使用skiprows参数来跳过文件顶部的行数,以及skip_footer参数来跳过文件底部的行数。通过使用这两个参数,可以先将整个文件加载到内存中,然后解析所需的行数。这样可以减少内存使用量,但仍然需要一次性加载整个文件。

以下是使用skiprows和skip_footer参数的示例代码:

import pandas as pd
# 读取Excel文件
df = pd.read_excel('file.xlsx', skiprows=10, skip_footer=5)
# 处理数据
# ...

在上面的示例中,skiprows参数设置为10,表示跳过文件顶部的10行。skip_footer参数设置为5,表示跳过文件底部的5行。然后,可以在读取完文件后,对数据进行进一步的处理。

需要注意的是,使用skiprows和skip_footer参数仍然会将整个文件加载到内存中,因此对于非常大的Excel文件,仍然可能会导致内存不足的问题。如果需要处理非常大的Excel文件,可能需要考虑其他解决方案,如分块读取数据或使用其他库来处理Excel文件。

0
0 Comments

pandas的read_excel函数中是否有chunksize参数的问题是如何产生的?如何解决这个问题?

问题的产生是因为之前的版本中,read_excel函数确实存在chunksize参数,但是该参数从来没有起到任何作用,因此最终被移除了。具体的情况可以参考在github上的一个issue(https://github.com/pandas-dev/pandas/issues/17094)。

为了解决这个问题,需要采取不同的方法。正如其他人所指出的,可以使用其他的途径来处理这个问题。

0
0 Comments

在pandas的read_excel函数中是否有一个chunksize参数?

解决方法:

如果你想添加一个进度指示器,你可以使用文件对象的.tell()方法。当然,这并不是很准确,但也许足够让用户估计出他们可以休息多久喝杯咖啡了:-)

所以这是我的计划:基本上用open打开你的excel文件,并将结果对象传递给pd.read_excel。根据文档,这应该是可能的,我刚刚验证了一个简单的xlsx文件的例子。

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

import io

fp.seek(0, io.SEEK_END) # 将文件光标设置到文件末尾

fp_len = fp.tell()

fp.seek(0, io.SEEK_SET) # 将文件光标设置回文件开头

有了这个设置,你有两种可能性:

1. 要么创建一个线程,定期通过调用你为xlsx文件打开的文件对象上的fp.tell()来更新进度条。

2. 创建一个自定义的包装器,提供pandas需要读取数据的方法(至少一个read方法),并同步更新进度条,这样你就不需要额外的线程。你的类只需要将方法调用传递给实际的文件类。在这个意义上,你可以将其与代理对象进行比较。

我必须承认,方法2有点不太干净。但我相信这两种方法都可以工作,因为我刚刚验证了pd.read_excel确实可以从文件对象(io.BufferedReader)中读取,包括xlsx文件,它们是压缩文件。这种方法可能不是很准确,因为文件指针可能不会线性地随时间移动,这取决于压缩率的波动(文件的某些部分可能具有更高的压缩率)。

0