Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 迭代Excel文件的迭代器_Python_Excel_List_Pandas_Iterator - Fatal编程技术网

Python 迭代Excel文件的迭代器

Python 迭代Excel文件的迭代器,python,excel,list,pandas,iterator,Python,Excel,List,Pandas,Iterator,我有一些数据存储在Excel表格(.xlsx)中,我当前的Python脚本将它们读入内存并用于计算。我将用一个例子进一步解释我的脚本 假设我的excel文件在特定列下包含此数据:a=[1,2,3,4,5] 我正在使用pandas(pd.read\u excel())将整个内容读入内存,并运行自己的迭代器函数以获得: a0 = [1,2,3,4,5] a1 = [5,1,2,3,4] a2 = [4,5,1,2,3] 等等。基本上,我将每个元素移位一个整数a0、a1和a2在这里显示为列表,但它们

我有一些数据存储在Excel表格(
.xlsx
)中,我当前的Python脚本将它们读入内存并用于计算。我将用一个例子进一步解释我的脚本

假设我的excel文件在特定列下包含此数据:
a=[1,2,3,4,5]

我正在使用pandas(
pd.read\u excel()
)将整个内容读入内存,并运行自己的迭代器函数以获得:

a0 = [1,2,3,4,5]
a1 = [5,1,2,3,4]
a2 = [4,5,1,2,3]
等等。基本上,我将每个元素移位一个整数
a0、a1
a2
在这里显示为列表,但它们是迭代器对象,我不存储它们

正如您在这里注意到的,
a0
始终与
a
相同,我实际上不需要将
a
存储在内存中,因为我只需要它一次,而
a0
就是这样做的。因此,我尝试使用某种迭代器对象来直接迭代excel文件,以捕获
a0、a1
a2
,就像我先导入
a
,然后在
a
上迭代
a0、a1、a2

我之所以尝试这样做,是因为我的脚本用于计算的时间比从Excel导入数据的时间要短。因此,为了提高脚本的性能,我需要找到一种方法来迭代Excel,而不是将数据保存到内存中。我将非常感谢您的帮助


另外,我的评论是:如果
pandas
或其他库具有
readThisCell()
之类的功能,那么我就可以轻松地创建自己的excel迭代器。但是我不知道我对pandas或任何其他库有什么选择。

我没有使用pandas
read\u excel
功能的经验,但我们在这方面取得了很好的成功。该库允许您定义一个指向特定工作表的变量,然后迭代该变量,如下所示(直接从中提取):


尝试:
pd.read\u excel(“您的\u文件”,skiprows=1)
@DenizI阅读openpyxl.load\u工作簿()的文档,它看起来就像我正在寻找的一样。但是,当我使用这个示例时,它会引发
TypeError:load\u workbook()得到一个意外的关键字参数“read\u only”
。我删除了
readonly
参数,它开始引发
KeyError:“工作表大数据不存在”。
。我可以看到,你直接从他们的网站上复制了这个例子,因此它应该可以工作,但是的,我得到了这两个错误。谢谢您的回复。@Deniz-用您的工作表名称替换
big_data
,它应该可以工作。首先加载工作簿,然后加载工作表,然后可以在其中的行和单元格上进行迭代。是的,这在没有
read_only
arg的情况下有效。不过我有一个顾虑:文档中说没有
read_only
arg,而是
use_迭代器(bool)
arg,它用于延迟迭代。当我简单地将其设置为
True
时,我遇到了一个奇怪的错误。我可以接受这一点,但文档的这种模糊性让我对使用这个库三思而后行,很遗憾。我将进一步测试这个库,看看它是否允许我实现我所期望的性能提升。然后我将在这里添加我的openpyxl迭代器脚本,如果一切正常,将您的答案标记为已接受。谢谢。尽管openpyxl只进行迭代,但它仍然比pandas的阅读和打印速度慢。下面是我的比较脚本:
https://repl.it/BHRf/2
。如您所见,
pandas
将其读入内存,然后打印,这将在0.77秒内完成
openpyxl
仅迭代和打印,耗时1.95秒。不幸的是,这并没有让我获得一些性能提升。我做错什么了吗?@Deniz-我不能真正谈论性能,我们的用例涉及非常小的文件。由于某些原因,我无法加载repl链接,但我看到了数字。我不知道该怎么处理。
from openpyxl import load_workbook
wb = load_workbook(filename='large_file.xlsx', read_only=True)
ws = wb['big_data'] # ws is now an IterableWorksheet

for row in ws.rows:
    for cell in row:
        print(cell.value)