学习过《Pandas-财务数据分析神器的小伙伴都知道,Pandas数据处理具有独到的优势:其丰富的数据处理方法和高效简洁的代码编辑,使我们在清洗和运算大量财务数据时简约了很多时间。

我们往往要将处理好的数据输出到Excel,学过课程的小伙伴应该熟悉pandas.DataFrame.to_excel方法,不加任何参数输出的表格样式真是平铺直叙:

那么我们如何快速的调节Pandas写入Excel的表格样式呢?

首先,我们来看to_excel有哪些参数:

DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None, storage_options=None)

  • to_excel方法可以调节数字格式,比如 float_format="%.2f",是否合并单元格 merge_cells="True"。但是不可以调整日期格式,也不可以在一个现有的Excel内追加Sheet。

怎么办呢,我们可以在to_excel的基础上叠加使用pandas.ExcelWriter:

pandas.ExcelWriter(path, engine=None, date_format=None, datetime_format=None, mode='w', storage_options=None, if_sheet_exists=None, engine_kwargs=None, **kwargs)

  • date_format:修改dates数据格式,比如 date_format="YYYY-MM-DD"
  • datetime_format:修改datetime数据格式,比如 datetime_format="YYYY-MM-DD HH:MM:SS"

如果engine使用了openpyxl,还可以向现有的Excel追加Sheet,更加amazing的是,openpyxl内的所有样式调整的方法,也可以一起使用了!

  • mode{'w', 'a'}, default 'w':写入excel文件模式,覆盖还是追加
  • if_sheet_exists{'error', 'new', 'replace'}, default 'error':如果Sheet已经存在,是报错,还是追加一个新表,或者覆盖原表。

 

接下来,我们就试一下简单调整相关参数

import pandas as pd
from datetime import date, datetime
df = pd.DataFrame(
    {
        '文本':['AAA','BBB','CCC'],
        '数字':[100000000.1234,20000000000.1234,30000000000.1234],
        'Date':[date(2014,1,31),date(1999,9,24), date(1998,5,26)],
        'Datetime':[datetime(1998,5,26), datetime(2014,2,28),datetime(1999,9,24)],
    })
df

with pd.ExcelWriter('path_to_file.xlsx',
                    date_format='mm-dd-yyyy',
                    datetime_format='mmm dd yyyy') as writer:
    df.to_excel(writer, index_label='序号',float_format="%.2f")

打开之后稍微好看一些,但是列宽还是问题

我们再试一下使用openpyxl引擎

from openpyxl.styles import Font
with pd.ExcelWriter('path_to_file.xlsx',
                    mode='a',
                    engine='openpyxl',
                    if_sheet_exists='replace') as writer:
        df.to_excel(writer, sheet_name='新的Sheet',index_label='序号',float_format="%.2f")
        # 定义worksheet工作表对象
        ws = writer.sheets['新的Sheet']  
        # 接下来的操作沿用openpyxl
        ws.column_dimensions['C'].width = 25
        ws.column_dimensions['D'].width = 25
        ws.column_dimensions['E'].width = 25
        # 随便设置下字体
        myfont =  Font(
                        name='黑体',
                        size=12,
                        bold=True,
                        italic=True,
                        underline='single',
                        color='FF66FF')
        for row in ws['B2:E4']:
            for c in row:
                c.font = myfont
        for c in ws['E']:
            c.number_format = 'mmm dd yyyy'
        for c in ws['C']:
            c.number_format = '##,##0.00'
        # 最后记得保存哦
        writer.save

打开Excel找到“新的sheet”直接就是这样啦~~~

有需要的小伙伴赶紧来试一试吧~~~