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:C
的 set_column()
属性,该列的格式与其他对列 A
、B
和 C
而不是:
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 来指定格式并且仅限于设置数字格式。
我创建了一个 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:C
的 set_column()
属性,该列的格式与其他对列 A
、B
和 C
而不是:
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 来指定格式并且仅限于设置数字格式。