我试图使用pandas编写并稍后将大量数据检索到excel文件。在写了大约4,000行之后,它会抛出与样式相关的ValueError(下面的示例代码和跟踪)。
代码:
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)
跟踪:
{{1}}
错误似乎在于xlwt,特别是每次写入新行时创建一个新样式,然后传递样式限制。有两个相关的帖子:post1和post2处理相同的错误。我尝试传递style_compression = 2(回答帖子1),但它没有帮助。
我的部分问题是我无法在此处找到相应的文档。 Pandas描述了to_excel()函数,但它没有采用样式参数。我无法找到关于ExcelWriter的pandas文档,但我想这是xlwt的一个函数?它接收了style_compression变量而没有抛出错误。 xlwt文档看起来并不是很好;我无法找到相关材料,或者pandas ExcelWriter在xlwt中映射到的内容。一个答案似乎是设置一个样式,然后在每次调用时将其传递给write函数,但由于我不明白这里使用的函数我不确定要设置什么在何处,何地/如何传递。
非常感谢任何帮助(包括指向正确的参考资料)。
谢谢!
答案 0 :(得分:0)
我没有弄清楚如何恰当地控制格式以避免此错误,但我确实找到了一个简单的解决方法。
使用
with pd.ExcelWriter('test.xlsx') as writer:
而不是
with pd.ExcelWriter('test.xls') as writer: # just changed the file type
我在一个循环中测试了超过一百万个DataFrames并且它没有抛出任何错误。