熊猫:无法写入excel文件

Ten*_*gis 12 python pandas

文档中尝试此示例

writer = ExcelWriter('output.xlsx')
df1.to_excel(writer,'Sheet1')
df2.to_excel(writer,'Sheet2')
writer.save()
Run Code Online (Sandbox Code Playgroud)

我发现我无法写入带有错误的excel文件

TypeError: copy() got an unexpected keyword argument 'font'
Run Code Online (Sandbox Code Playgroud)

我在Mac专业版上使用Panda 0.16.

编辑:写入xls文件工作得很好.我不坚持使用xlsx文件,只是想知道为什么它不起作用.

pba*_*mba 11

根据他们的文档,熊猫取决于

在openpyxl 1.6.1或更高版本,但低于2.0.0

最后一个openpyxl版本低于2.0.0版本1.8.6,您应该只删除当前的openpyxl版本并运行:

pip install openpyxl==1.8.6
Run Code Online (Sandbox Code Playgroud)

如果您使用pip,或找到相同的方法来安装此特定版本.

  • 我安装了`openpyxl == 1.8.6`.我的熊猫版本是`pandas === 0.16.0-294-g45f69cd`.这没有用.问题仍然存在.现在我真的需要xlsx格式,因为最大线路限制.. (2认同)

slu*_*shy 9

如果你不关心标题是否有它们的边框和粗体字,并且你不想限制openpyxl的版本,最快的方法是覆盖header_style字典None.

如果还有日期或日期时间,则还必须将工作簿datedatetime格式明确设置为None:

from datetime import datetime
import pandas as pd
pd.core.format.header_style = None  # <--- Workaround for header formatting

dt = datetime.now()
d = datetime.date(datetime.now())
df1 = pd.DataFrame([{'c1': 'alpha', 'c2': 1}, {'c1': 'beta', 'c2': 2}])
df2 = pd.DataFrame([{'c1': dt, 'c2': d}, {'c1': dt, 'c2': d}])

with pd.ExcelWriter('output.xlsx') as writer:
    writer.date_format = None # <--- Workaround for date formatting
    writer.datetime_format = None  # <--- this one for datetime
    df1.to_excel(writer,'Sheet1')
    df2.to_excel(writer,'Sheet2')
Run Code Online (Sandbox Code Playgroud)

不清楚为什么关键字参数永远不会通过openpyxl弃用包装器......但它们没有.此外,如果您要格式化任何其他单元格,请使用新的openpyxl api.

顺便提一下,如果你有Anaconda,所有这些问题都会消失.

  • 哇.pandas编写器显式覆盖格式的空参数以使其成为默认值,而不是采用默认值并让用户覆盖.跆拳道.我会编辑答案. (2认同)

Tal*_*etz 8

要快速解决方案,请更换此

xcell.style = xcell.style.copy(**style_kwargs)
Run Code Online (Sandbox Code Playgroud)

pass
Run Code Online (Sandbox Code Playgroud)

在pandas/io/excel.py第778行.

openpyxl升级了他们的api和pandas也需要更新以支持openpyxl.