微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Pandas Excelwriter写入StringIO对象?

我可以将StringIO对象传递给pd.to_csv()就好了:

io = StringIO.StringIO()
pd.DataFrame().to_csv(io)

但是当使用excel编写器时,我遇到了很多麻烦.

io = StringIO.StringIO()
writer = pd.ExcelWriter(io)
pd.DataFrame().to_excel(writer,"sheet name")
writer.save()   

返回一个

AttributeError: StringIO instance has no attribute 'rfind'

我正在尝试创建一个ExcelWriter对象而不调用pd.ExcelWriter()但是遇到了一些麻烦.这是我到目前为止所尝试的:

from xlsxwriter.workbook import Workbook
writer = Workbook(io)
pd.DataFrame().to_excel(writer,"sheet name")
writer.save()

但现在我得到一个AttributeError:’Workbook’对象没有属性’write_cells’

如何将excel格式的pandas数据帧保存到StringIO对象?

解决方法:

Pandas期望ExcelWriter构造函数文件名路径,尽管每个编写器引擎都支持StringIO.也许这应该在Pandas中作为bug /功能请求引发.

与此同时,这是使用Pandas xlsxwriter引擎的变通方法示例:

import pandas as pd
import StringIO

io = StringIO.StringIO()

# Use a temp filename to keep pandas happy.
writer = pd.ExcelWriter('temp.xlsx', engine='xlsxwriter')

# Set the filename/file handle in the xlsxwriter.workbook object.
writer.book.filename = io

# Write the data frame to the StringIO object.
pd.DataFrame().to_excel(writer, sheet_name='Sheet1')
writer.save()
xlsx_data = io.getvalue()

更新:从Pandas 0.17开始,现在可以更直接地执行此操作:

# Note, Python 2 example. For Python 3 use: output = io.BytesIO().
output = StringIO.StringIO()

# Use the StringIO object as the filehandle.
writer = pd.ExcelWriter(output, engine='xlsxwriter')

另请参阅XlsxWriter文档中的Saving the Dataframe output to a string.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐