python - 使用 Pandas Excelwriter 写入 StringIO 对象?

标签 python excel pandas stringio xlsxwriter

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

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

但是在使用excel writer时,我遇到了很多麻烦。

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

返回一个

AttributeError: StringIO instance has no attribute 'rfind'

我试图在不调用 pd.ExcelWriter() 的情况下创建一个 ExcelWriter 对象,但我遇到了一些问题。到目前为止,这是我尝试过的:

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

但现在我得到一个 AttributeError: 'Workbook' object has no attribute 'write_cells'

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

最佳答案

Pandas 需要 ExcelWriter 构造函数的文件名路径,尽管每个编写器引擎都支持 StringIO。也许这应该作为 Pandas 中的错误/功能请求提出。

与此同时,这是一个使用 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')

另见 Saving the Dataframe output to a string在 XlsxWriter 文档中。

关于python - 使用 Pandas Excelwriter 写入 StringIO 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28058563/

相关文章:

python - 如何将 float 组更改为字符串数组,然后保存到txt

excel - 错误 : Else without if

vba - 如何删除字符?

python - 在python中获取日期时间的标准偏差

python - pip安装selenium权限错误

python - 如何在图表中标记特定类型(例如 030T)的所有三元组?

vba - 有没有一种方法可以在不使用 select 的情况下向图表中的点添加标注标签?

python - pandas:在(多索引)DataFrame上使用每个组中最常见的值执行 fillna() 的最佳方法是什么?

python - 根据来自不同数据框的两列条件乘以列?

python - 多索引数据框到具有新列的数据透视表