Удалить границы для индексов с помощью Pandas + xlsxwriter - PullRequest
1 голос
/ 22 апреля 2020

Кажется, что xlsxwriter автоматически добавляет границы вокруг pandas df-индексов. Как я могу удалить границы после записи данных? Кажется, когда я пытаюсь использовать что-то вроде

worksheet.set_column('A:A', None, test_format) #test_format just makes borders = 0 

Это либо удаляет значения, либо ничего не делает ...

Вот пример настройки:

import xlsxwriter
import pandas as pd

# Create a test df
df = pd.DataFrame({'Name': ['Tesla','Tesla','Toyota','Ford','Ford','Ford'],
                   'Type': ['Model X','Model Y','Corolla','Bronco','Fiesta','Mustang']})

df = df.set_index('Name').groupby('Name').apply(lambda x:x[:]) 


# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')

# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='test', startrow=1, merge_cells=True)

## Get the xlsxwriter objects from the dataframe writer object. Setting up xlsxwriter for formatting
workbook = writer.book
worksheet = writer.sheets['test']


writer.save()

Есть ли способ применить форматирование после того, как df был написан в excel? Или изменение форматирования индекса?

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Для тех, кто хочет решить эту проблему с помощью нескольких индексов, вы можете использовать что-то вроде следующего:

# changes row index format, 4 denotes the start row, 0 denotes the column
for row_num, value in enumerate(df.index.get_level_values(level=1)):
    worksheet.write(4+row_num , 0, value, FORMAT_OF_CHOICE)
1 голос
/ 23 апреля 2020

Кажется, что xlsxwriter автоматически добавляет границы вокруг pandas df-индексов.

Строго говоря, Pandas добавляет границы, используя xlsxwriter (или openpyxl или xlwt).

Кажется, когда я пытаюсь использовать что-то вроде ... It либо удаляет значения, либо ничего не делает.

Это потому, что формат ячейки, который уже существует, переопределяет формат столбца.

Обычный обходной путь для этого заключается в отключите заголовок или индекс и укажите свой собственный пример в документации XlsxWriter .

Однако, в вашем случае у вас есть мультииндекс с объединенными ячейками, так что это немного сложнее копировать.

...