Xlsxwriter格式化pandasDataFrame输出到Excel的麻烦

我创build了一个pandaspivot_table并将其导出为xlsxwriter。 但是,格式化并没有达到我所说的要求。 我已经看了xlsxwriter文档和其他问题在这里堆栈溢出,我还没有find一个解决scheme。 我有一种感觉,我忽略了一些明显的东西。

# 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()子句中的'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) 

我可以让我的列左alignment而不是粗体?


更新:我已经升级到pandas17.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) 

还请注意, 正如文档中所述,这不适用于date时间列。 对于那些你将不得不使用pandasAPI来指定格式,并且仅限于设置数字格式。