Xlsxwriter将pandas DataFrame输出格式化为excel时出现问题

时间:2016-02-16 20:20:23

标签: python excel pandas xlsxwriter

我已经创建了一个pandas pivot_table,并使用xlsxwriter将其导出到excel。但是,格式化并不是我认为我告诉它要做的事情。我已经查看了xlsxwriter文档以及Stack Overflow上的其他问题,但我还没有找到解决方案。我有一种感觉,我忽视了一些显而易见的事情。

# Write to Excel
path = 'some/path'
writer = pd.ExcelWriter(path, engine='xlsxwriter')
df.to_excel(writer, sheet_name='df')

set_column()的列宽正常。所以我已经为我做了,这很好。但'bold': False子句中的'align': 'left'wb.add_format()不是。

# Make it look nice
wb = writer.book
ws = writer.sheets['df']

format = wb.add_format({'bold': False,
                        'align': 'left'})
ws.set_column('A:C', None, format)

ws.set_column(0,0, 10.2)
ws.set_column(1,1, 25.2)
ws.set_column(2,2, 15.2)

writer.save()

或者,以下内容确实应用了格式,但它删除了单元格B3的内容:

ws.write('B3', None, format)

我可以将列对齐而不是粗体吗?

更新: 我已升级到pandas 17.0并且我已将代码更新为:

format_bold = wb.add_format({'bold': False})
format_and_left = wb.add_format({'align': 'left', 'bold': False})

ws.set_column('A:A', 10.2, format_bold)
ws.set_column('B:B', 25.2, format_and_left)
ws.set_column('C:C', 15.2, format_bold)

仍然没有运气。我已经确认我的翻译是使用print pd.__version__使用pandas版本0.17.0。我还在做错什么吗?

1 个答案:

答案 0 :(得分:1)

正如@Jkdc指出的那样,确保您使用Pandas 16+是值得的,因为在早期版本中存在XlsxWriter set_column问题。

但是,您的代码中还存在一个问题,即您要覆盖列set_column()的{​​{1}}属性,这些列的格式包含对列A:C,{{1}的其他调用的格式}和A不要:

B

以下内容应该可行(除非还有其他问题):

C

另请注意,as outlined in the documentation这对日期时间列不起作用。对于那些您将必须使用Pandas API来指定格式,并且仅限于设置数字格式。