我在下面有此功能,它使我的数据框带有边框和一些突出显示。但是,因为我使用过.style
,所以我无法使用.to_html()
将数据帧放入电子邮件中,因此我使用.render()
。但是,当我使用render()
时,边框格式会稍有变化。下面是我想要的Python图片,以及电子邮件中的图片。知道如何在保留格式的同时将样式化的数据框放入电子邮件正文吗?
import win32com.client
import numpy as np
import pandas as pd
import datetime as dt
import time
import os
curr_date = dt.datetime.now().strftime("%Y%m%d")
csv = pd.read_csv("Pipeline_Signals_" + curr_date + ".csv", delimiter = ',')
df = pd.DataFrame(csv)
df = df1.replace(np.nan, '', regex=True)
def _color_red_or_green(val):
color = 'red' if "*" in val else 'white'
return 'background-color: %s' % color
df = (df.style
.applymap(_color_red_or_green)
.set_table_styles([{'selector': 'th', 'props': [('border-color', 'black'),('background-color', 'white'), ('border-style','solid')]}])
.hide_index()
.set_properties(**{'color': 'black',
'border-style' :'solid',
'border-color': 'black'}))
df1 = df.render()
import win32com.client
inbox = win32com.client.gencache.EnsureDispatch("Outlook.Application").GetNamespace("MAPI")
inbox = win32com.client.Dispatch("Outlook.Application")
mail = inbox.CreateItem(0x0)
mail.To = "test@test.co.uk"
mail.CC = "test@test.co.uk"
mail.Subject = "Test Signals " + curr_date
mail.HTMLBody = df1
mail.Display()
这是Python中数据框的外观以及我希望它的外观
这是将数据框放入电子邮件正文时的数据框外观。由于某些原因,边界会改变。
答案 0 :(得分:0)
它似乎来自显示表时默认使用的CSS表。设置样式时,应尝试将表的CSS“ border-collapse”属性设置为“ collapse”。如果不起作用,请尝试将“边框间距”属性设置为0。