将大型熊猫数据帧保存到Excel

5

我正在生成一个大的数据框(以CSV格式保存时为1.5 GB),需要将其存储在Excel文件的工作表中,同时还有一个较小的数据框需要保存在另一个工作表中。

print('Reading temporaty files for variable {}:'.format(Var))
print(' Reading stations')
s=pd.read_csv(StatFile,sep=':',dtype={'ID': 'str'},encoding='utf-8')
print(' Reading data')
d=pd.read_csv(DataFile,sep=':',dtype='str',encoding='utf-8').transpose()
d.columns = d.iloc[0]
d=d[1:].astype('float')
d.reindex_axis(sorted(d.columns), axis=1)
print('Writing out Excel file for variable {}'.format(Var))
writer = pd.ExcelWriter(Path + Var + '.xlsx', engine='xlsxwriter')
d.to_excel(writer, sheet_name='Data')
OutStatCol=['ID','Name','Longitude','Latitude','GRS','OriginalVariable','VariableUnits','URL','JsonNode']
s.to_excel(writer, columns=OutStatCol, index=False, sheet_name='Stations')
writer.save()

我的代码能够正常处理小的数据框,但是对于大的数据框,则会出现以下错误:

Traceback (most recent call last):
  File "./Test2.py", line 29, in <module>
    writer.save()
  File "/home/user/miniconda2/lib/python2.7/site-packages/pandas/io/excel.py", line 1413, in save
    return self.book.close()
  File "/home/user/miniconda2/lib/python2.7/site-packages/xlsxwriter/workbook.py", line 297, in close
    self._store_workbook()
  File "/home/user/miniconda2/lib/python2.7/site-packages/xlsxwriter/workbook.py", line 624, in _store_workbook
    xlsx_file.write(os_filename, xml_filename)
  File "/home/user/miniconda2/lib/python2.7/zipfile.py", line 1148, in write
    self._writecheck(zinfo)
  File "/home/user/miniconda2/lib/python2.7/zipfile.py", line 1114, in _writecheck
    " would require ZIP64 extensions")
zipfile.LargeZipFile: Filesize would require ZIP64 extensions

我能否在ExcelWriter声明或to_excel()方法中指定类似allowZip64=True的内容?

谢谢!


你试过把它分成两半吗? - jftuga
我需要整个DataFrame存储在一个工作表中,如果我正确理解你的建议,将其分成两半似乎无法实现我的目标... - user6357781
快了...你需要在 pd.ExcelWriter(...) 中使用一个关键字。 - Aaron
我尝试了allowZip64=True.use_zip64()两种方式,但都返回了错误。 - user6357781
@user6357781 找到了,告诉我这个是否有效。 - Aaron
2个回答

12

这需要查阅一些源代码,但是...

print('Reading temporaty files for variable {}:'.format(Var))
print(' Reading stations')
s=pd.read_csv(StatFile,sep=':',dtype={'ID': 'str'},encoding='utf-8')
print(' Reading data')
d=pd.read_csv(DataFile,sep=':',dtype='str',encoding='utf-8').transpose()
d.columns = d.iloc[0]
d=d[1:].astype('float')
d.reindex_axis(sorted(d.columns), axis=1)
print('Writing out Excel file for variable {}'.format(Var))
writer = pd.ExcelWriter(Path + Var + '.xlsx', engine='xlsxwriter')

#THIS
writer.book.use_zip64()

d.to_excel(writer, sheet_name='Data')
OutStatCol=['ID','Name','Longitude','Latitude','GRS','OriginalVariable','VariableUnits','URL','JsonNode']
s.to_excel(writer, columns=OutStatCol, index=False, sheet_name='Stations')
writer.save()

应该可以工作

我花了比预期更长的时间才弄清楚writer没有继承自工作簿。 writer.book 直接是一个工作簿实例... 哦 (表示惊讶或失望)


2
当查看源代码时,ctl - f是您最好的朋友...还有记事本++ :) - Aaron
1
非常感谢,它有效。不幸的是,在处理几个小时后,最终的Excel文件损坏了...我会再次运行它并检查一下。 - user6357781
我有同样的问题,但这个解决方案似乎在Databricks上不起作用。有什么想法吗? - rpd
同样的问题,加上 xl_writer.book.use_zip64() 但最终生成的 Excel 文件损坏了。 - George Carvalho

0

我刚刚在函数.to_excel()中添加了engine='xlsxwriter',问题已经解决了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接