С помощью pandas dataframe, как я могу установить цвет фона для обоих уровней мультииндекса при выводе в тело письма в виде HTML? - PullRequest
0 голосов
/ 29 сентября 2019

Я создал фрейм данных pandas и установил цвет фона для многоиндексных столбцов с помощью метода стилей. Когда я вывожу его в Jupyter, оба уровня многоиндексных столбцов имеют цвет фона. Но когда я экспортирую его по электронной почте, цвет фона отображается только на первом уровне. Есть ли способ закрасить оба уровня мультииндексных столбцов при экспорте в электронную почту?

import pandas as pd
import numpy as np
from IPython.core.display import display, HTML

dates = pd.date_range('20130101',periods=3)

columns = list("ABCD")
columns = list(zip(['HEADER'] * 4, columns))             
#[('HEADER', 'A'), ('HEADER', 'B'), ('HEADER', 'C'), ('HEADER', 'D')]
columns = pd.MultiIndex.from_tuples(columns, names=['first', 'second'])  

df = pd.DataFrame(np.random.randn(3,4),index=dates,columns=columns)

styles = [{'props':[("font-family", "Calibri")]}, {
       'selector': 'th',
       'props': [
           ('background-color', 'yellow'),
           ('text-align','center')
       ]}]


s = df.style.set_table_styles(styles)

html = s.hide_index().render()
with open("html_c.html","w") as fp:
   fp.write(html)

#to display in a jupyter notebook
display(HTML(html))

он правильно выводит в Jupyter ...

enter image description here

... но когда я экспортирую его в тело письма ...

import win32com.client as win32   
#send email with html in body
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = #*email address*
mail.Subject = "HTML TEST"
mail.HTMLBody = html
mail.Send()

... я получаю этот вывод без цвета фона для индекса второго уровня столбцов:

enter image description here

Заранее большое спасибо за любые предложения.

1 Ответ

0 голосов
/ 29 сентября 2019

я решил это сам. Мне пришлось добавить rowspan = "2" в селектор заголовка в стилях.

...