xlwt ValueError: more than 4094 XFs (styles) [while using pandas]
xlwt ValueError: more than 4094 XFs (styles) [while using pandas]
我正在尝试使用 pandas 将大量数据写入并稍后检索到 excel 文件。在写了大约 4,000 行之后,它抛出一个与样式相关的 ValueError(下面的示例代码和跟踪)。
代码:
with pd.ExcelWriter('test.xls', style_compression = 2) as writer:
row = 0
while 1: #running it until I stop it during testing
data = get_that_sweet_data()
df = pd.DataFrame(data) #makes a DataFrame object with two rows
df.to_excel(writer, sheet_name = sheet1, startrow = row)
row += 3
跟踪:
Traceback (most recent call last):
File "scribe.py", line 96, in <module>
df.to_excel(writer, sheet_name = sheet1, startrow = row)
File "C:\Python\lib\site-packages\pandas\core\frame.py", line 1545, in to_excel
engine=engine)
File "C:\Python\lib\site-packages\pandas\io\formats\excel.py", line 649, in write
freeze_panes=freeze_panes)
File "C:\Python\lib\site-packages\pandas\io\excel.py", line 1518, in write_cells
val, style)
File "C:\Python\lib\site-packages\xlwt\Worksheet.py", line 1088, in write
self.row(r).write(c, label, style)
File "C:\Python\lib\site-packages\xlwt\Row.py", line 231, in write
style_index = self.__parent_wb.add_style(style)
File "C:\Python\lib\site-packages\xlwt\Workbook.py", line 324, in add_style
return self.__styles.add(style)
File "C:\Python\lib\site-packages\xlwt\Style.py", line 92, in add
return self._add_style(style)[1]
File "C:\Python\lib\site-packages\xlwt\Style.py", line 151, in _add_style
raise ValueError("More than 4094 XFs (styles)")
ValueError: More than 4094 XFs (styles)
错误似乎出在xlwt,具体是每写一行就创建一个新的样式,然后超过样式的限制。有两个相关的 posts: post1 and post2 处理相同的错误。我尝试传入 style_compression = 2(对 post 1 的回答)但它没有帮助。
我的部分问题是找不到此处涉及的正确文档。 Pandas 描述了 to_excel() 函数,但它不接受样式参数。我找不到关于 ExcelWriter 是什么的 pandas 文档,但我猜它是 xlwt 的一个函数?它接受了 style_compression 变量而没有抛出错误。 xlwt 文档看起来不是很好;我找不到相关的 material,或者 pandas ExcelWriter 在 xlwt 中映射到的内容。一个答案似乎是设置单一样式,然后在每次调用时将其传递给 write 函数,但由于我不明白这里使用的是什么函数,我不确定在哪里设置什么 where/how 可以传入。
任何帮助(包括将我指向正确的参考 material)将不胜感激。
谢谢!
我没有想出如何适当地控制格式来避免这个错误,但我确实找到了一个简单的解决方法。
使用
with pd.ExcelWriter('test.xlsx') as writer:
而不是
with pd.ExcelWriter('test.xls') as writer: # just changed the file type
我测试了在一个循环中写入超过一百万个 DataFrame,它没有抛出任何错误。
我正在尝试使用 pandas 将大量数据写入并稍后检索到 excel 文件。在写了大约 4,000 行之后,它抛出一个与样式相关的 ValueError(下面的示例代码和跟踪)。
代码:
with pd.ExcelWriter('test.xls', style_compression = 2) as writer:
row = 0
while 1: #running it until I stop it during testing
data = get_that_sweet_data()
df = pd.DataFrame(data) #makes a DataFrame object with two rows
df.to_excel(writer, sheet_name = sheet1, startrow = row)
row += 3
跟踪:
Traceback (most recent call last):
File "scribe.py", line 96, in <module>
df.to_excel(writer, sheet_name = sheet1, startrow = row)
File "C:\Python\lib\site-packages\pandas\core\frame.py", line 1545, in to_excel
engine=engine)
File "C:\Python\lib\site-packages\pandas\io\formats\excel.py", line 649, in write
freeze_panes=freeze_panes)
File "C:\Python\lib\site-packages\pandas\io\excel.py", line 1518, in write_cells
val, style)
File "C:\Python\lib\site-packages\xlwt\Worksheet.py", line 1088, in write
self.row(r).write(c, label, style)
File "C:\Python\lib\site-packages\xlwt\Row.py", line 231, in write
style_index = self.__parent_wb.add_style(style)
File "C:\Python\lib\site-packages\xlwt\Workbook.py", line 324, in add_style
return self.__styles.add(style)
File "C:\Python\lib\site-packages\xlwt\Style.py", line 92, in add
return self._add_style(style)[1]
File "C:\Python\lib\site-packages\xlwt\Style.py", line 151, in _add_style
raise ValueError("More than 4094 XFs (styles)")
ValueError: More than 4094 XFs (styles)
错误似乎出在xlwt,具体是每写一行就创建一个新的样式,然后超过样式的限制。有两个相关的 posts: post1 and post2 处理相同的错误。我尝试传入 style_compression = 2(对 post 1 的回答)但它没有帮助。
我的部分问题是找不到此处涉及的正确文档。 Pandas 描述了 to_excel() 函数,但它不接受样式参数。我找不到关于 ExcelWriter 是什么的 pandas 文档,但我猜它是 xlwt 的一个函数?它接受了 style_compression 变量而没有抛出错误。 xlwt 文档看起来不是很好;我找不到相关的 material,或者 pandas ExcelWriter 在 xlwt 中映射到的内容。一个答案似乎是设置单一样式,然后在每次调用时将其传递给 write 函数,但由于我不明白这里使用的是什么函数,我不确定在哪里设置什么 where/how 可以传入。
任何帮助(包括将我指向正确的参考 material)将不胜感激。
谢谢!
我没有想出如何适当地控制格式来避免这个错误,但我确实找到了一个简单的解决方法。
使用
with pd.ExcelWriter('test.xlsx') as writer:
而不是
with pd.ExcelWriter('test.xls') as writer: # just changed the file type
我测试了在一个循环中写入超过一百万个 DataFrame,它没有抛出任何错误。