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

Trouble with Xlsxwriter formatting a pandas DataFrame output to excel

我创建了一个 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() 的列宽有效。所以我得到了适合我的东西,这很好。但是 wb.add_format() 子句中的 'bold': False'align': 'left' 不是。

# 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。我还是做错了什么?

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

但是,您的代码中也存在一个问题,您正在覆盖列 A:Cset_column() 属性,该列的格式与其他对列 ABC 而不是:

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)

像下面这样的东西应该可以工作(除非有其他问题):

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

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