Как отформатировать фрейм данных при записи в Excel

Я пытаюсь отформатировать фрейм данных при написании, чтобы преуспеть.

Для Xlsxwriter: поскольку мы не можем отформатировать заголовки. Я копирую заголовок в первую строку и пытаюсь изменить формат первой строки (я установил header=False при записи в excel). Мне нужно отформатировать определенные части моего заголовка. Например, первые 3 заголовка выделены жирным шрифтом, следующие три — красным и т. д. Есть ли способ установить определенные форматы заголовков? Теперь я могу сделать это либо для полной строки, либо для всего столбца. Я готов перебирать строки и столбцы, но для этого я думаю, что мне нужно использовать .write, проблема здесь в том, что для .write мне тоже нужно вставить значение, но значение уже доступно из Dataframe.

Как я могу настроить форматирование определенных ячеек, таких как A1, A2, A3, для их форматирования по-разному.


person excelpanda    schedule 24.05.2020    source источник


Ответы (1)


Вы можете выполнить пользовательское форматирование, используя xlsxwriter:

Пример кадра данных:

    id  PER Team
0   1   12  OKC
1   2   14  OKC
2   3   11  GSW

Был пользовательский форматер для заголовков:

writer = pd.ExcelWriter("file.xlsx", engine='xlsxwriter')

df.to_excel(writer, sheet_name='Sheet1', startrow=1, header=False, index=False)

workbook  = writer.book
worksheet = writer.sheets['Sheet1']

# add custom headers
header_format1 = workbook.add_format({
    'bold': True,
    'border': 1})

header_format2 = workbook.add_format({
    'bold': True,
    'fg_color': '#ffcccc',
    'border': 1})

#add columns required for each format
column_format1 = ["id"]
column_format2 = ["PER", "Team"]

for col_num, value in enumerate(df.columns.values):
    if value in column_format1:
        worksheet.write(0, col_num, value, header_format1)
    elif value in column_format2:
        worksheet.write(0, col_num, value, header_format2)

    column_len = df[value].astype(str).str.len().max()

    column_len = max(column_len, len(value)) + 3
    print(column_len)

    worksheet.set_column(col_num, col_num, column_len)

writer.save()

Выходной формат Excel:

введите здесь описание изображения

person Raj Srujan Jalem    schedule 24.05.2020