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

按email_id拆分DataFrame并按多列唯一值命名Excel文件

问题背景

现有如下示例DataFrame:

import pandas as pd

data = pd.DataFrame({'email_id': ['abc@gmail.com;test1@gmail.com','abc@gmail.com;def@yahoo.com','abdc@gmail.com','ache@gmail.com','aqce@gmail.com','pqr@gmail.com','pqr@gmail.com'],
             'Dept_id': [21,23,25,26,28,29,31],
             'dept_name':['Science','Chemistry','Maths','Social','Physics','Botany','Zoology'],
             'location':['KOR','ASN','ANZ','IND','AUS','NZ','NZ']})

需求

  • 按email_id列的唯一值拆分DataFrame
  • 拆分后的数据分别保存为Excel文件,每个唯一email_id对应一个文件
  • Excel文件名由对应分组的Dept_id、dept_name、location列的唯一值组成(例如pqr@gmail.com分组的文件名应为29_31_Botany_Zoology_NZ.xlsx)

原代码问题

原代码能实现拆分,但文件名不符合要求,还存在两处报错点:

  • col_list未定义,调用to_excel时会触发NameError
  • 未调用writer.save(),导致Excel文件无法正常保存或损坏
修正后的代码
import pandas as pd

data = pd.DataFrame({'email_id': ['abc@gmail.com;test1@gmail.com','abc@gmail.com;def@yahoo.com','abdc@gmail.com','ache@gmail.com','aqce@gmail.com','pqr@gmail.com','pqr@gmail.com'],
             'Dept_id': [21,23,25,26,28,29,31],
             'dept_name':['Science','Chemistry','Maths','Social','Physics','Botany','Zoology'],
             'location':['KOR','ASN','ANZ','IND','AUS','NZ','NZ']})

# 定义需要保存的列(不需要指定列可直接删除columns参数)
col_list = ['email_id', 'Dept_id', 'dept_name', 'location']

for email, group in data.groupby('email_id'):
    # 提取各列唯一值并转为字符串,用下划线拼接
    dept_ids = '_'.join(map(str, group['Dept_id'].unique()))
    dept_names = '_'.join(group['dept_name'].unique())
    locations = '_'.join(group['location'].unique())
    
    # 拼接符合要求的文件名
    filename = f"{dept_ids}_{dept_names}_{locations}.xlsx"
    
    # 用with语句自动管理文件流,无需手动保存关闭
    with pd.ExcelWriter(filename, engine='xlsxwriter') as writer:
        # 处理带分号的邮箱,取第一部分作为工作表名避免非法字符
        sheet_name = email.split(';')[0]
        group.to_excel(writer, columns=col_list, sheet_name=sheet_name, index=False, startrow=1)

关键说明

  • 用map(str, ...)将数字类型的Dept_id转为字符串,避免拼接时出现类型错误
  • 使用with语句管理ExcelWriter,自动完成文件保存与关闭,避免资源泄漏
  • 对包含分号的邮箱做拆分处理,避免工作表名出现Excel不支持的非法字符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:45:35