2016-06-15 2 views
3

У меня проблема при настройке формата для разных ячеек. У меня есть два фрейма данных, которые содержат номера, которые должны отображаться в разных форматах. Я создал простой пример, чтобы показать свою проблему.Xlsxwriter разных форматов для разных ячеек в одном столбце

import pandas as pd 
import numpy as np 
import xlsxwriter 

frame1 = pd.DataFrame(np.random.randint(0,100,size=(10, 4)), columns=list('ABCD')) 

#want to show this frame as percentage in Excel later 
frame2 = pd.DataFrame(np.random.randint(0,100,size=(10, 4)), columns=list('EFGH')) 

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

frame1.to_excel(writer, sheet_name='Sheet1', startcol= 0, startrow= 0) 

frame2.to_excel(writer, sheet_name='Sheet1', startcol= 0, startrow = (2 + len(frame1))) 

writer.save() 

Этот код производит этот лист Excel:

Shows output

Теперь проблема заключается в том, что я, например, может понадобиться установить клетки, выделенные желтым цветом в% или в другом формате. Я знаю, что могу установить формат для целого столбца или строки, но мне не удалось решить, как я могу установить формат только для определенных ячеек. Я думаю, есть некоторые действительно легкие решения.

ответ

1

Формат столбца в Excel применяется ко всему столбцу и может быть переопределен только форматом строки или форматом ячейки.

Таким образом, вам нужно будет применить формат ячейки к ячейкам, которые вы хотите форматировать по-разному, и это невозможно с интерфейсом Pandas.

Альтернативой может быть использование условного формата для диапазона интересующих вас ячеек. См. Например, this Pandas program из документов XlsxWriter.

+0

Танки для справки, я удивлен, что для этого нет более простого решения, но использование conditional_format работает нормально. – Siesta

2

Работа вокруг будет использовать conditional_format, как было упомянуто @jmcnamara, вы просто применить {'type': 'top','value': str(f2rows),'format': format1}, где f2rows это количество строк вашего dataframe и format1 это формат, который вы хотели бы применить.

import pandas as pd 
import numpy as np 
import xlsxwriter 

frame1 = pd.DataFrame(np.random.randint(0,100,size=(10, 4)), columns=list('ABCD')) 

#want to show this frame as percentage in Excel later 
frame2 = pd.DataFrame(np.random.randint(0,100,size=(10, 4)), columns=list('EFGH')) 

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

frame1.to_excel(writer, sheet_name='Sheet1', startcol= 0, startrow= 0) 

frame2.to_excel(writer, sheet_name='Sheet1', startcol= 0, startrow = (2 + len(frame1))) 

# Get the xlsxwriter workbook and worksheet objects. 
workbook = writer.book 
worksheet = writer.sheets['Sheet1'] 

f2rows = frame2.shape[0] 
startR = 4 + len(frame1) 
endR = startR + f2rows -1 

# Apply a conditional format to the cell range. 
format1 = workbook.add_format({'bg_color': '#FFFF00', 
           'font_color': '#9C0006'}) 

worksheet.conditional_format('C{}:C{}'.format(startR, endR), {'type': 'top', 
              'value': str(f2rows), 
              'format': format1}) 

worksheet.conditional_format('E{}:E{}'.format(startR, endR), {'type': 'top', 
              'value': str(f2rows), 
              'format': format1}) 

writer.save() 
Смежные вопросы