groupby配合循环导出是最直接可靠的方式:先按列值自动分组(支持dropna=false处理空值),再逐组保存为独立文件,避免手动筛选漏数据;导出前校验非空、规范文件名、统一utf-8-sig编码,并用excelwriter管理多sheet以确保稳定落地。

用 groupby 配合循环导出是最直接可靠的方式
直接按列值分组,再逐组保存为独立文件,避免手动切片出错或内存重复加载。关键不是“怎么拆”,而是“拆完怎么稳稳落地”。
常见错误是写成 df[df['col'] == val].to_csv(...) 逐条件筛选——当分组键有缺失、空值或类型不一致时,会漏数据或报 KeyError;而 groupby 自动处理 NaN 分组(默认丢弃,可设 dropna=False)。
- 用
df.groupby('category', dropna=False)确保空值也被归入一个组 - 文件名建议用
str(group_name)而非直接拼接,防止None或特殊字符导致OSError - 导出前检查
len(group) > 0,跳过空组,避免生成空 CSV - 若需保留原始索引,加参数
index=False;否则默认会多一列索引列
导出 Excel 多个 sheet 而非多个文件?用 pandas.ExcelWriter
当业务要求“一个 Excel 里多个 tab”,硬拆成一堆 .xlsx 文件反而增加下游处理负担。这时 ExcelWriter 是更贴切的解法,且能复用同一个文件句柄。
容易踩的坑是忘记调用 .close() 或没用上下文管理器,导致文件被锁住、内容写不全,甚至报 PermissionError。
- 必须用
with pd.ExcelWriter('output.xlsx') as writer:包裹写入逻辑 - sheet 名长度不能超 31 字符,且不能含
/ ? * [ ],建议用re.sub(r'[\/?*[]]', '_', str(name))[:31]清洗 - 每个
group.to_excel(writer, sheet_name=...)会自动追加,无需手动控制流 - 不支持同时写入多个 Excel 文件,这点和 CSV 导出本质不同
大数据量下避免内存爆炸:用 chunksize + 分组聚合替代全量 groupby
当 DataFrame 超过 50 万行,且分组键高基数(比如用户 ID),df.groupby(...).apply(...) 可能触发内存峰值翻倍,甚至 OOM。这不是 pandas bug,而是分组过程会构建中间哈希表并复制数据块。
python-docx Skill功能概述python-docx Skill是一项面向实际任务的技能,主要用于本Skill提供使用python-docx生成专业Word文档的标准方法和最佳实践;生成安全服务方案文档;核心要点生成技术架构设计文档;生成任何需要专业排版的Word文档;核心库 : python-docx;使用与执行辅助库 : docx.shared , docx.enum , docx.oxml.ns;标准代码模板;1. 文档初始化;2. 字体设置(必须!它将相关步骤、工具调用和结果整理方式集
真正可行的降压方式是:先用 read_csv(..., chunksize=N) 流式读取,每块单独 groupby 后追加写入对应文件(需提前建好文件句柄或用 mode='a')。
- CSV 追加写入必须加
header=False(首块除外),否则每块都写列名 - 用
open(..., 'a', newline='')手动管理文件句柄比反复to_csv(mode='a')更可控 - 分组键若涉及多列,确保每块内键组合语义一致(例如不能把同一用户的记录切到两个 chunk)
- 该方案牺牲了“一次性分组”的简洁性,换来确定性的内存上限
文件路径和编码问题常被忽略,但一出错就卡在最后一步
导出失败往往不是逻辑问题,而是路径中含中文、空格,或 Windows 默认 ANSI 编码与 pandas 的 UTF-8 不兼容,导致乱码或 UnicodeEncodeError。
别依赖 IDE 当前工作目录——显式构造绝对路径,并统一声明编码。
- 用
Path(__file__).parent / 'output'替代'./output',避免相对路径漂移 - CSV 导出一律加
encoding='utf-8-sig'(尤其要 Excel 打开不乱码) - Windows 上路径分隔符用
/或os.path.join,别手写(反斜杠在字符串里要转义) - 文件名含变量时,用
f"{val!r}"或正则过滤非法字符,而不是直接str(val)
实际项目里最麻烦的往往不是“怎么分”,而是“分完怎么让下游系统稳定读进去”——编码、空值标记、时间格式、小数位数,这些细节一旦不统一,后面补救成本远高于前期多写两行清洗逻辑。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










