定义不同的 pandas xlsxwriter 边框类型

Defining different pandas xlsxwriter border types

我想用 xlsxwriter 为底部边框定义不同的强度。我的问题是:在下面的示例中如何防止 thick-bottom-HEADER-border 被覆盖? 我想指出,如果我稍后使用条件格式开始一行,我会得到一行没有底部边框。

import numpy as np
import pandas as pd

dates = pd.DataFrame(pd.date_range('2000-01-01', periods = 15), columns = ['date'])
d = pd.DataFrame(np.random.randint(1, 5, (15, 3)), columns = list('abc'))
d = pd.concat([dates, d], axis = 1)

writer = pd.ExcelWriter('dates_border.xlsx',
                    #OR: 'c:\users\USER_NAME\desktop\dates_border.xlsx',
                    datetime_format='yyyy.mm') 
d.to_excel(writer, 'Sheet1', index = False)
worksheet = writer.sheets['Sheet1']
workbook  = writer.book

# header: I LOSE THE THICK BOTTOM BORDER OF THE HEADER
header_format = workbook.add_format({'bottom': 2, 'bg_color': '#F9DA04'})
for col_num, value in enumerate(d.columns.values):
worksheet.write(0, col_num, value, header_format)

# data with bottom borders
format1 = workbook.add_format()
format1.set_bottom(7)

worksheet.conditional_format(1, 0, d.shape[0], d.shape[1] -1,
{'type': 'cell',
 'criteria': '<>',
 'value': '""',
 'format': format1})

writer.save()

谢谢和亲切的问候

我在下面提供了解决方法。我为第二行添加了另一种条件格式,仅称为 'format2'。它将单元格的顶部设置为粗边框,将底部设置为虚线。

import numpy as np
import pandas as pd

dates = pd.DataFrame(pd.date_range('2000-01-01', periods = 15), columns = ['date'])
d = pd.DataFrame(np.random.randint(1, 5, (15, 3)), columns = list('abc'))
d = pd.concat([dates, d], axis = 1)

writer = pd.ExcelWriter('dates_border.xlsx',
                    #OR: 'c:\users\USER_NAME\desktop\dates_border.xlsx',
                    datetime_format='yyyy.mm') 
d.to_excel(writer, 'Sheet1', index = False)
worksheet = writer.sheets['Sheet1']
workbook  = writer.book

# header: I LOSE THE THICK BOTTOM BORDER OF THE HEADER
header_format = workbook.add_format({'bottom': 2, 'bg_color': '#F9DA04'})
for col_num, value in enumerate(d.columns.values):
    worksheet.write(0, col_num, value, header_format)

# data with bottom borders
format1 = workbook.add_format()
format1.set_bottom(7)

#snippet added to op script
format2 = workbook.add_format()
format2.set_top(2)
format2.set_bottom(7)

worksheet.conditional_format(1, 0, 1, d.shape[1] -1,
{'type': 'cell',
 'criteria': '<>',
 'value': '""',
 'format': format2})
#end of snippet added to op script

worksheet.conditional_format(1, 0, d.shape[0], d.shape[1] -1,
{'type': 'cell',
 'criteria': '<>',
 'value': '""',
 'format': format1})

writer.save()

预期输出: