почему стиль pandas dataframe теряется при сохранении с помощью "to_excel"? - PullRequest
1 голос
/ 18 марта 2019

Per в этом примере метод to_excel должен сохранить файл Excel с цветом фона.Тем не менее, мой сохраненный файл Excel не имеет цвета.Я пытался писать, используя двигатели openpyxl и xlsxwriter.В обоих случаях файл Excel был сохранен, но цвет / стиль ячейки был потерян.

Я могу прочитать файл обратно и переформатировать с помощью openpyxl, но если это to_excelметод должен работать, почему бы и нет?

Вот пример кода.

 import pandas as pd # version 0.24.2
 dict = {'A': [1, 1, 1, 1, 1], 'B':[2, 1, 2, 1, 2], 'C':[1, 2, 1, 2, 1]}
 df = pd.DataFrame(dict)
 df_styled = df.style.apply(lambda x: ["background: #ffa31a" if x.iloc[0] < v else " " for v in x], axis=1)

 df_styled 
 ''' in my jupyter notebook, this displayed my dataframe with background color when condition is met, (all the 2s highlighted)'''

 '''Save the styled data frame to excel using to_excel'''
 df_styled.to_excel('example_file_openpyxl.xlsx', engine='openpyxl')
 df_styled.to_excel('example_file_xlsxwriter.xlsx', engine='xlsxwriter')

1 Ответ

0 голосов
/ 23 марта 2019

Я сам наткнулся на это и, насколько мне известно, пока нет поддержки для экспорта, чтобы преуспеть, как это.Я настроил ваш код так, чтобы он соответствовал выводу в документации Excel.

Это вывод документации для метода Excel.

df.style.\
    applymap(color_negative_red).\
    apply(highlight_max).\
    to_excel('styled.xlsx', engine='openpyxl')

Это ваш код скорректирован:

import pandas as pd
dict = {'A': [1, 1, 1, 1, 1], 'B':[2,1,2,1,2], 'C':[1,2,1,2,1]}
df = pd.DataFrame(dict)

def highlight(df, color = "yellow"):

    attr = 'background-color: {}'.format(color)
    df_bool = pd.DataFrame(df.apply(lambda x: [True if x.iloc[0] < v else False for v in x],axis=1).apply(pd.Series),
                      index=df.index)
    df_bool.columns =df.columns
    return pd.DataFrame(np.where(df_bool, attr, ""),
                       index= df.index, columns=df.columns)
df.style. \
    apply(highlight, axis=None).\
    to_excel("styled.xlsx", engine="openpyxl")

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...