gpt4 book ai didi

python - 在电子邮件正文中发送样式化的 Dataframe

转载 作者:行者123 更新时间:2023-11-27 23:01:52 24 4
gpt4 key购买 nike

我在下面有这个函数,它使我的数据框非常漂亮,带有边框和一些突出显示。但是,因为我使用了 .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 中的样子,也是我想要的样子

enter image description here

这是我将数据框放入电子邮件正文时的样子。由于某种原因,边界发生了变化。

enter image description here

最佳答案

它似乎来自显示表格时默认使用的 CSS 表。在设置样式时,您应该尝试将表格的 CSS“border-collapse”属性设置为“collapse”。如果不起作用,请尝试将“border-spacing”属性设置为 0。

关于python - 在电子邮件正文中发送样式化的 Dataframe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58938658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com