2017-02-23 74 views
1

Я использую приведенный ниже код для экспорта моего df в excel, у меня есть требование покрасить конкретные столбцы в выходном excel.Как поместить выделенные столбцы в фреймворк python?

# DF TO EXCEL 
from pandas import ExcelWriter 
writer = ExcelWriter('Output.xlsx') 
df.to_excel(writer,'sheet1') 
writer.save() 

Пожалуйста, предложите мне подход.

+0

Возможно ли это? ??? – DyZ

+0

Цвет как? Как цвет текста? –

+1

@DYZ Можно, но не уверен, как реализовать на DF - проверьте http://stackoverflow.com/questions/7746837/python-xlwt-set-custom-background-colour-of-a-cell – prady

ответ

3

Вы можете использовать:

import string 
np.random.seed(100) 
df = pd.DataFrame(np.random.randint(10, size=(5,5)), columns=list('GHIJK')) 
print (df) 
    G H I J K 
0 8 8 3 7 7 
1 0 4 2 5 2 
2 2 2 1 0 8 
3 4 0 9 6 2 
4 4 1 5 3 4 

Если необходимо установить все выбранные столбцы в одном цвете:

writer = pd.ExcelWriter('file1.xlsx', engine='xlsxwriter') 
df.to_excel(writer, sheet_name='Sheet1') 

#set format 
workbook = writer.book 
format = workbook.add_format({'bg_color': 'red'}) 
worksheet = writer.sheets['Sheet1'] 

#dict for map excel header, first A is index, so omit it 
d = dict(zip(range(25), list(string.ascii_uppercase)[1:])) 
print (d) 
{0: 'B', 1: 'C', 2: 'D', 3: 'E', 4: 'F', 5: 'G', 6: 'H', 7: 'I', 8: 'J', 
9: 'K', 10: 'L', 11: 'M', 12: 'N', 13: 'O', 14: 'P', 15: 'Q', 16: 'R', 
17: 'S', 18: 'T', 19: 'U', 20: 'V', 21: 'W', 22: 'X', 23: 'Y', 24: 'Z'} 

#select columns of df 
cols = ['G','J','K'] 

#in loop set background color where are data 
#http://xlsxwriter.readthedocs.io/working_with_conditional_formats.html 
for col in cols: 
    excel_header = str(d[df.columns.get_loc(col)]) 
    len_df = str(len(df.index) + 1) 

    rng = excel_header + '2:' + excel_header + len_df 
    worksheet.conditional_format(rng, {'type': 'no_blanks', 
             'format': format}) 
writer.save() 

excel1

Если необходимо установить все выбранные столбцы в разные цвета:

writer = pd.ExcelWriter('file1.xlsx', engine='xlsxwriter') 
df.to_excel(writer, sheet_name='Sheet1') 

#set format 
workbook = writer.book 
worksheet = writer.sheets['Sheet1'] 

#dict for map excel header, first A is index, so omit it 
d = dict(zip(range(25), list(string.ascii_uppercase)[1:])) 
print (d) 
{0: 'B', 1: 'C', 2: 'D', 3: 'E', 4: 'F', 5: 'G', 6: 'H', 7: 'I', 8: 'J', 
9: 'K', 10: 'L', 11: 'M', 12: 'N', 13: 'O', 14: 'P', 15: 'Q', 16: 'R', 
17: 'S', 18: 'T', 19: 'U', 20: 'V', 21: 'W', 22: 'X', 23: 'Y', 24: 'Z'} 

#select columns of df 
cols = ['G','J','K'] 
colors = ['red','yellow','blue'] 

#in loop set background color where are data 
#http://xlsxwriter.readthedocs.io/working_with_conditional_formats.html 
for i, col in enumerate(cols): 
    format = workbook.add_format({'bg_color': colors[i]}) 
    excel_header = str(d[df.columns.get_loc(col)]) 
    len_df = str(len(df.index) + 1) 

    rng = excel_header + '2:' + excel_header + len_df 
    worksheet.conditional_format(rng, {'type': 'no_blanks', 
             'format': format}) 
writer.save() 

excel2

+0

Я изменил ваш скрипт с помощью своей информационной рамки, получив сообщение об ошибке «KeyError:« I ». Любые подсказки? – prady

+0

извините, это моя ошибка, я дал недопустимое имя столбца. Он отлично работает. Большое спасибо! :) – prady

1

Небольшое обновление для тех, кто найдет этот вопрос; сегодня Pandas включает в себя функции стиля и стилистические объекты, и это чрезвычайно важно для достижения того, чего вы хотите, не пройдя очень запутанные методы. https://pandas.pydata.org/pandas-docs/stable/style.html

 Смежные вопросы

  • Нет связанных вопросов^_^