1. 背景
在用Pandas做数据处理时,为了呈现方便,往往会将结果数据导出为Excel文件。但美中不足的是Pandas并不支持Excel文件格式的设置。
而XlsxWriter可以与Pandas无缝结合,并具有非常精细的Excel格式控制功能。XlsxWriter对于Python初学者来说有一定的学习门槛,可以查询官网文档进行学习。
2. 问题
笔者在使用时,卡在了表格边框的设置上面。
在设置好format后,采用worksheet.set_column()或worksheet.set_row()对行或列进行边框设置时,要么出现:
“所选列全部设置了边框”
要么出现:
“所选行全部设置了边框”
的情况。
3. 解决方法
worksheet.conditional_format()
参数及使用方法详见官网说明文档。
4. 举个栗子
Excel表格中数据如下:
原始数据
我们将该excel表格导入DataFrame,如下:import pandas as pd
df = pd.read_excel('https://adamyide-1256435674.cos.ap-/tutorial01.xlsx', header = None, index = None)
df为:
df中的数据
接下来,开始设置表格边框:writer = pd.ExcelWriter('tutorial01_bolder.xlsx',engine='xlsxwriter')
df.to_excel(writer,sheet_name='sheet1', header = None, index = None)
workbook = writer.book
worksheet = writer.sheets['sheet1']
format_border = workbook.add_format({'border':1}) # 设置边框格式
worksheet.conditional_format('A1:XFD1048576',{'type':'no_blanks', 'format': format_border}) # 这里是核心,根据条件来设置格式
workbook.close()
format_border = workbook.add_format({'border':1})中的'border':格式:上面代码中的1是index值。IndexNameWeightStyle0None0
1Continuous1-----------
2Continuous2-----------
3Dash1- - - - - -
4Dot1. . . . . .
5Continuous3-----------
6Double3===========
7Continuous0-----------
8Dash2- - - - - -
9Dash Dot1- . - . - .
10Dash Dot2- . - . - .
11Dash Dot Dot1- . . - . .
12Dash Dot Dot2- . . - . .
13SlantDash Dot2/ - . / - .
worksheet.conditional_format('A1:XFD1048576',{'type':'no_blanks', 'format': format_border})可以查看官网说明,实际上是根据条件判断,进行格式化。
'A1:XFD1048576'是目前.xlsx格式文件支持的sheet大小,如果想提高运行效率,可以在已知表格大小的情况下,缩小这个区域。笔者没有尝试,应该会有效果吧。
这里注意参数中的'type',内容可以非常丰富,具体可以参考下官网Working with Conditional Formatting这一章。
最终出来的excel表格效果是这样:
输出效果
已经可以满足我的需求了。
注意:以上代码框中的代码可以直接在装有pandas的环境中运行,文件会存在当前运行目录中。
5 感谢:XlsxWriter的作者John McNamara,给我们带来这么好用的工具。他的GitHub上有更多的信息。
/p/869ddf214f5f