#python #pandas #web-scraping #scrapy #xlsxwriter
Вопрос:
Возникла проблема с выравниванием первого столбца слева. Не знаю, что здесь не так. Форматирование, похоже, работает для верхней строки.
Я просто хочу, чтобы текст первой колонки выровнялся слева.
def export_to_xlsx(date): global df ## CREATE PD DATAFRAME all_mp_dict = scraper(date) df = pd.DataFrame(all_mp_dict) ## WORKSHEET FORMATTING (TOP ROW - YELLOW BG COLOR) workbook_loc = './mp_excel/mp_data_' date '.xlsx' writer = pd.ExcelWriter(workbook_loc, engine='xlsxwriter') df.to_excel(writer, sheet_name=date '_raw') workbook = writer.book worksheet = writer.sheets[date '_raw'] header_format = workbook.add_format({ 'bold': True, 'text_wrap': True, 'valign': 'top', 'fg_color': '#FFFF00', 'border': 1}) for col_num, value in enumerate(df.columns.values): worksheet.write(0, col_num 1, value, header_format) ## WORKSHEET FORMATTING (FIRST COLUMN - ALIGN LEFT) a_format = workbook.add_format() a_format.set_align('left') worksheet.set_column('A:A', 100, a_format) ## TO_EXCEL writer.close()
Ответ №1:
Причина, по которой формат столбца Excel не применяется к первому столбцу фрейма данных, заключается в том, что Pandas уже применил формат полужирного/по центру к ячейке, чтобы выделить значения индекса. В Excel и XlsxWriter формат ячейки переопределяет формат столбца.
Таким образом, вы можете удалить индекс и добавить свой собственный, с его собственным форматом, таким же образом, как вы перезаписываете заголовки столбцов.
Комментарии:
1. Спасибо. У меня была та же проблема с заголовком, и я нашел код, на который вы ссылаетесь, чтобы заставить его работать. Я не мог понять, как сделать то же самое для первого столбца, особенно если нет df.строк?
2. Вы можете использовать df.shape, чтобы получить ограничения по строкам и столбцам для фрейма данных. Альтернативным подходом было бы добавить столбец индекса во фрейм данных, а затем удалить автоматический (и автоматически отформатированный) столбец индекса из экспорта Excel:
df.to_excel(writer, sheet_name=date '_raw', index=False)
3. Отлично сработало, спасибо.