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

Python实现DataFrame嵌入邮件正文:CSV转DataFrame列异常问题

解决CSV转DataFrame嵌入邮件丢失列名的问题

这种情况大概率是你读取CSV文件时的参数设置出了问题,或是把DataFrame转成邮件正文(一般用HTML格式)时漏了保留列名的配置。我给你分步骤排查和解决:

第一步:确认CSV读取逻辑是否正确

先确保你读取后的DataFrame本身是带正确列名的,这是基础:

  • 如果你的CSV文件第一行本身就是列名,读取时别误把列名当成数据行:
    import pandas as pd
    # 默认header=0,会自动把第一行设为列名,数据从第二行开始读取
    df = pd.read_csv('your_file.csv')
    
  • 如果CSV文件没有自带列名,第一行就是数据,那得手动指定列名:
    df = pd.read_csv('your_file.csv', header=None)
    # 自定义列名列表,数量要和CSV列数匹配
    df.columns = ['用户ID', '订单金额', '下单时间']
    

读取后可以先打印df.head()确认列名和数据对应,先把DataFrame本身的正确性搞定。

第二步:把DataFrame转成带列名的HTML邮件正文

邮件正文一般支持HTML格式,转的时候要确保保留表头(列名)。默认df.to_html()会包含表头,但如果不小心加了header=False就会丢失列名:

# 保留表头,同时去掉索引列让表格更整洁
html_table = df.to_html(index=False)

# 可选:加简单样式让表格在邮件里更易读
html_table = df.to_html(index=False, border=1, style='border-collapse: collapse;')

之后把这个HTML表格嵌入邮件正文即可,示例发送代码:

import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 组装邮件内容
mail_content = f"<p>您好,这是CSV转换后的表格:</p>{html_table}"
msg = MIMEText(mail_content, 'html', 'utf-8')
msg['Subject'] = Header('CSV转换结果', 'utf-8')
msg['From'] = 'your_email@xxx.com'
msg['To'] = 'recipient@xxx.com'

# 发送邮件(以QQ邮箱为例)
with smtplib.SMTP_SSL('smtp.qq.com', 465) as server:
    server.login('your_email@xxx.com', 'your_auth_code')
    server.send_message(msg)

常见坑点排查

  • 先检查CSV文件本身:打开看看第一行是不是列名,有没有空行、编码乱码的情况
  • 如果邮件客户端显示异常,可能是样式兼容问题,试试去掉自定义样式,用最基础的HTML表格
  • 确认读取DataFrame后,列名没有被意外覆盖或删除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:07:22