☰
Python Vibe Coding 实操|基于 Pandas 完成销售 Excel 报表自动化生成
2026/10/1 8:36:10 网站建设 项目流程

Python Vibe Coding实操|基于Pandas完成销售Excel报表自动化生成(实验一)

前言

什么是Vibe Coding:不是完全靠手写代码,也不是直接把全部需求丢给AI一键生成完事;而是用自然语言描述业务需求,借助AI编码工具辅助开发,人主导需求拆解、边界定义、代码审查、异常处理与结果验证,重点考察需求拆解、风险识别、结果校验的综合能力。

本次完成考题一:Excel销售报表生成脚本,原始输入文件为sales_raw.xlsx,完成脏数据清洗、多维度聚合统计,输出多Sheet的report.xlsx,处理空文件、无有效数据、字段缺失等异常场景。

开发环境:Python3.10+,依赖库:pandas、openpyxl

一、需求澄清清单(交给AI前先梳理清楚需求)

这是Vibe Coding非常关键的一步,不要直接把考题复制粘贴丢给AI,自己先把目标、输入输出、边界条件、验收标准整理出来,再交给AI,减少AI幻觉。

1.业务目标

读取原始销售Excel文件,完成数据清洗、多维度聚合统计,生成多工作表的结果报表,禁止修改原始输入文件,各种异常输入不能直接程序崩溃,要有友好提示。

2.输入

文件:sales_raw.xlsx 原始字段:日期、销售员、产品、数量、单价、地区 原始数据问题:存在空值、重复行、数量为负数/0的脏数据。

3.输出

输出文件:report.xlsx,包含4个工作表

  1. 明细清洗后:清洗完成之后的有效原始明细
  2. 按销售员:按销售员维度汇总销售额(销售额=数量 × 单价)
  3. 按地区:按地区维度汇总销售额
  4. 总览:月度整体销售总额

4.边界&异常条件

  1. 关键字段为空,直接丢弃该行;
  2. 数量≤0,判定异常,剔除该行;
  3. 全字段重复行,执行去重;
  4. 文件不存在、空Excel文件;
  5. 清洗完成后没有任何有效数据,脚本给出提示,不直接崩溃;
  6. 文件写入占用(PermissionError文件被Excel打开占用)捕获异常提示用户关闭文件;
  7. 绝对不能修改原始sales_raw.xlsx。

5.验收标准

  1. 脚本一键运行即可生成report.xlsx;
  2. 统计结果可以人工核对,数值准确;
  3. 异常输入场景输出可读提示,程序不会直接抛堆栈报错退出;
  4. 输出4个sheet全部存在。

二、工程目录结构

project/ ├── sales_raw.xlsx # 原始输入销售数据 ├── sales_report.py # 主脚本 ├── report.xlsx # 程序运行后生成输出文件 └── requirements.txt # 依赖声明

requirements.txt

pandas>=2.0 openpyxl>=3.1

三、核心代码实现 sales_report.py

说明:代码由AI辅助生成,人工做了review,补充异常捕获、边界判断,修复文件权限占用报错问题。

import pandas as pd import os INPUT_FILE = "sales_raw.xlsx" OUTPUT_FILE = "report.xlsx" def main(): # ==========1.读取原始文件,捕获文件不存在异常========== if not os.path.exists(INPUT_FILE): print(f"【错误】输入文件 {INPUT_FILE} 不存在,请检查!") return try: df_raw = pd.read_excel(INPUT_FILE, engine="openpyxl") except Exception as e: print(f"【错误】读取文件失败: {str(e)}") return print(f"原始数据总行数:{len(df_raw)}") # ==========2.数据清洗环节========== # 关键字段:日期、销售员、产品、数量、单价、地区,关键字段为空直接丢弃 key_cols = ["日期", "销售员", "产品", "数量", "单价", "地区"] df_clean = df_raw.dropna(subset=key_cols).copy() # 剔除数量<=0的异常行 df_clean = df_clean[df_clean["数量"] > 0] # 全字段去重 df_clean = df_clean.drop_duplicates() print(f"清洗后有效数据行数:{len(df_clean)}") # 判断清洗后是否完全没有有效数据 if len(df_clean) == 0: print("【警告】经过清洗之后无任何有效销售数据,停止生成报表!") return # 计算每行销售额 df_clean["销售额"] = df_clean["数量"] * df_clean["单价"] # ==========3.多维度统计计算========== # 按销售员汇总 df_salesman = df_clean.groupby("销售员", as_index=False).agg({ "销售额": "sum" }).sort_values("销售额", ascending=False) # 按地区汇总 df_area = df_clean.groupby("地区", as_index=False).agg({ "销售额": "sum" }).sort_values("销售额", ascending=False) # 总览,月度总额 total_sale = df_clean["销售额"].sum() df_total = pd.DataFrame({ "月度销售总额": [total_sale] }) # ==========4.写入多sheet的Excel报表,处理文件占用权限异常========== try: with pd.ExcelWriter(OUTPUT_FILE, engine="openpyxl") as writer: df_clean.to_excel(writer, sheet_name="明细清洗后", index=False) df_salesman.to_excel(writer, sheet_name="按销售员", index=False) df_area.to_excel(writer, sheet_name="按地区", index=False) df_total.to_excel(writer, sheet_name="总览", index=False) print(f"✅报表生成成功!输出文件:{OUTPUT_FILE}") except PermissionError: print(f"【错误】写入失败!{OUTPUT_FILE} 文件正在被Excel/WPS打开,请关闭该Excel文件后重新运行脚本!") except Exception as e: print(f"【错误】写入报表发生异常:{str(e)}") if __name__ == "__main__": main()

四、运行说明

  1. 将sales_raw.xlsx放到脚本同一目录;
  2. 安装依赖
pip install -r requirements.txt
  1. 运行脚本
python sales_report.py

⚠️注意:运行脚本前,务必关闭report.xlsx,否则会出现PermissionError权限拒绝报错,代码内部已经捕获该异常给出提示。

运行成功之后,目录生成report.xlsx,包含4个工作表。

五、程序运行结果

六、测试用例设计(正常用例 + 边界异常用例)

用例类型测试场景预期结果
正常用例sales_raw.xlsx包含正常销售数据,夹杂脏数据(空值、重复、负数数量)成功生成4个sheet报表;脏数据被过滤,销售额统计结果正确
边界异常用例1原始文件全部都是脏数据,清洗完成之后0行有效数据控制台输出警告,不会生成报表,程序正常退出,不抛异常堆栈
边界异常用例2report.xlsx被WPS/Excel打开状态运行脚本捕获PermissionError,打印友好提示,不会直接崩溃
边界异常用例3sales_raw.xlsx文件丢失控制台提示输入文件不存在,程序安全退出

七、AI协作过程记录(Vibe Coding核心)

1.交给AI的提示词(第一轮)

我没有直接粘贴全部考题,而是使用前面整理的需求澄清清单给到AI,要求输出pandas脚本,重点要求:不要修改原文件,处理空文件、清洗后无有效数据异常,输出4个sheet。

2.AI生成初稿存在的问题(人工Code Review发现)

  1. 初稿没有捕获PermissionError,当Excel打开输出文件时直接抛出Errno13堆栈;
  2. 没有判断清洗之后数据行数为0的场景,空数据也会生成空白报表;
  3. 缺少控制台友好中文提示,全部是程序原生报错;
  4. groupby聚合没有做排序,报表阅读性差。

3.人工干预修改点

  1. 增加文件是否存在前置判断;
  2. 捕获写入时的PermissionError,输出提示用户关闭Excel;
  3. 添加清洗后行数判断,无有效数据直接终止;
  4. 对统计结果按销售额降序排序;
  5. 打印日志,方便调试看原始行数、清洗后行数。

关键:AI负责写pandas读写、groupby聚合这类机械代码;人负责定义异常边界、校验逻辑、审查风险,不能完全放任AI生成直接运行。

八、复盘总结

1.哪些交给AI完成

  1. pandas读取Excel、多sheet写入模板代码;
  2. groupby分组聚合的语法;
  3. DataFrame去重、dropna缺失值清洗的基础代码。

2.哪些必须自己拍板、人工审查

  1. 梳理完整需求澄清清单,定义异常边界;
  2. 判断关键字段是哪些,确认哪些行应该被过滤;
  3. 识别风险:文件被占用的权限异常、空数据场景,AI很容易漏掉这类边界;
  4. 验证统计结果:拿少量手工数据,核对脚本输出销售额是否和手算一致;
  5. 禁止修改原始文件,确认代码没有写回输入文件。

3.遇到的风险和坑

  1. PermissionError:13权限拒绝,最容易踩坑,AI经常忘记处理Excel文件被占用的场景;
  2. 如果不做行数校验,全脏数据的时候会生成一份无意义报表,误导使用者;
  3. 区分哪些字段是关键字段,不能无脑全部字段dropna,会错误丢掉有效业务数据。

4.Vibe Coding感悟

Vibe Coding不等于AI全自动写代码,人是总指挥。如果直接把一大段考题丢给AI,AI经常会忽略边界条件、异常处理。先把需求拆解、输入输出、异常场景写清楚,再分段交给AI生成;每一小段代码运行验证,人工review风险点,最后做整体测试,才能得到健壮可用的程序。

九、拓展思考

  1. 当前代码可以继续优化:写入Excel采用临时文件原子替换,防止脚本中途崩溃生成损坏的report.xlsx;
  2. 可以增加日志模块,把运行日志输出保存到日志文件,而不是仅仅打印控制台。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询