df = pd.DataFrame({'A': np.linspace(1, 10, 10)})
df = pd.concat([df, pd.DataFrame(np.random.randn(10, 4), columns=list(
    'BCDE'))], axis=1)
df.iloc[0, 2] = np.nan
df_html_output = df.style.set_table_styles([{'selector': 'thead th',
    'props': [('background-color', 'red')]}, {'selector':
    'thead th:first-child', 'props': [('display', 'none')]}, {'selector':
    'tbody th:first-child', 'props': [('display', 'none')]}]).render()
html.append(df_html_output)
body = '\r\n\n<br>'.join('%s' % item for item in html)
msg.attach(MIMEText(body, 'html'))
Pandas dataframe.to_html() - add background color to header