You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将pandas DataFrame作为HTML插入邮件正文时to_html属性报错如何解决

报错原因

你代码中生成的total_fees并非DataFrame类型:dma_fees['DMA_FEE_SUBTOTAL'].sum()是对单列数据做求和计算,返回的是numpy.float64类型的数值,该类型对象没有to_html方法,仅Pandas的DataFrame、Series类对象支持to_html方法。
如果报错指向的是format参数里的product_splits/trader_splits/broker_splits,说明这三个变量的生成逻辑有误,最终得到的是数值类型而非DataFrame类型。

解决方案

分两种场景处理:

场景1:仅需要展示总费用的单个数值

不需要调用to_html方法,直接将数值转为字符串嵌入HTML模板即可,示例修改如下:

total_fees = dma_fees['DMA_FEE_SUBTOTAL'].sum()
import win32com.client as win32
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = 'patrick.oneill@example.com'
mail.Subject = 'Example'
mail.Body = f"Hi,\n 上月总费用为 {total_fees}"
mail.HTMLBody = f"""\
    <html>
      <head></head>
      <body>
        <p>Hi<br>
           上月总费用:<br>
           {total_fees}
           <br>按产品拆分费用:<br>
           {product_splits.to_html(index=False)}
           <br>按交易员拆分费用:<br>
           {trader_splits.to_html(index=False)}
           <br>按经纪商拆分费用:<br>
           {broker_splits.to_html(index=False)}

           此致,
           Patrick
        </p>
      </body>
    </html>
    """

场景2:需要total_fees为DataFrame格式插入表格

修改total_fees的生成逻辑,将求和结果转为DataFrame即可:

import pandas as pd
# 将求和结果封装为DataFrame
total_fees = pd.DataFrame({'上月总费用': [dma_fees['DMA_FEE_SUBTOTAL'].sum()]})
import win32com.client as win32
outlook = win32.Dispatch('outlook.application')
mail = outlook.CreateItem(0)
mail.To = 'patrick.oneill@example.com'
mail.Subject = 'Example'
mail.Body = f"Hi,\n 上月总费用为 {total_fees.iloc[0,0]}"
mail.HTMLBody = """\
    <html>
      <head></head>
      <body>
        <p>Hi<br>
           上月总费用:<br>
           {0}
           <br>按产品拆分费用:<br>
           {1}
           <br>按交易员拆分费用:<br>
           {2}
           <br>按经纪商拆分费用:<br>
           {3}

           此致,
           Patrick
        </p>
      </body>
    </html>

    """.format(total_fees.to_html(index=False), product_splits.to_html(index=False), trader_splits.to_html(index=False), broker_splits.to_html(index=False))

代码中的index=False参数用于移除HTML表格默认生成的索引列,展示效果更整洁。

内容的提问来源于stack exchange,提问作者paddyusa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:06:02