Python Vibe Coding 实操|基于 Pandas 完成销售 Excel 报表自动化生成
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个工作表明细清洗后清洗完成之后的有效原始明细按销售员按销售员维度汇总销售额销售额数量 × 单价按地区按地区维度汇总销售额总览月度整体销售总额4.边界异常条件关键字段为空直接丢弃该行数量≤0判定异常剔除该行全字段重复行执行去重文件不存在、空Excel文件清洗完成后没有任何有效数据脚本给出提示不直接崩溃文件写入占用PermissionError文件被Excel打开占用捕获异常提示用户关闭文件绝对不能修改原始sales_raw.xlsx。5.验收标准脚本一键运行即可生成report.xlsx统计结果可以人工核对数值准确异常输入场景输出可读提示程序不会直接抛堆栈报错退出输出4个sheet全部存在。二、工程目录结构project/ ├── sales_raw.xlsx # 原始输入销售数据 ├── sales_report.py # 主脚本 ├── report.xlsx # 程序运行后生成输出文件 └── requirements.txt # 依赖声明requirements.txtpandas2.0 openpyxl3.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, engineopenpyxl) except Exception as e: print(f【错误】读取文件失败: {str(e)}) return print(f原始数据总行数{len(df_raw)}) # 2.数据清洗环节 # 关键字段日期、销售员、产品、数量、单价、地区关键字段为空直接丢弃 key_cols [日期, 销售员, 产品, 数量, 单价, 地区] df_clean df_raw.dropna(subsetkey_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_indexFalse).agg({ 销售额: sum }).sort_values(销售额, ascendingFalse) # 按地区汇总 df_area df_clean.groupby(地区, as_indexFalse).agg({ 销售额: sum }).sort_values(销售额, ascendingFalse) # 总览月度总额 total_sale df_clean[销售额].sum() df_total pd.DataFrame({ 月度销售总额: [total_sale] }) # 4.写入多sheet的Excel报表处理文件占用权限异常 try: with pd.ExcelWriter(OUTPUT_FILE, engineopenpyxl) as writer: df_clean.to_excel(writer, sheet_name明细清洗后, indexFalse) df_salesman.to_excel(writer, sheet_name按销售员, indexFalse) df_area.to_excel(writer, sheet_name按地区, indexFalse) df_total.to_excel(writer, sheet_name总览, indexFalse) 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()四、运行说明将sales_raw.xlsx放到脚本同一目录安装依赖pip install -r requirements.txt运行脚本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发现初稿没有捕获PermissionError当Excel打开输出文件时直接抛出Errno13堆栈没有判断清洗之后数据行数为0的场景空数据也会生成空白报表缺少控制台友好中文提示全部是程序原生报错groupby聚合没有做排序报表阅读性差。3.人工干预修改点增加文件是否存在前置判断捕获写入时的PermissionError输出提示用户关闭Excel添加清洗后行数判断无有效数据直接终止对统计结果按销售额降序排序打印日志方便调试看原始行数、清洗后行数。关键AI负责写pandas读写、groupby聚合这类机械代码人负责定义异常边界、校验逻辑、审查风险不能完全放任AI生成直接运行。八、复盘总结1.哪些交给AI完成pandas读取Excel、多sheet写入模板代码groupby分组聚合的语法DataFrame去重、dropna缺失值清洗的基础代码。2.哪些必须自己拍板、人工审查梳理完整需求澄清清单定义异常边界判断关键字段是哪些确认哪些行应该被过滤识别风险文件被占用的权限异常、空数据场景AI很容易漏掉这类边界验证统计结果拿少量手工数据核对脚本输出销售额是否和手算一致禁止修改原始文件确认代码没有写回输入文件。3.遇到的风险和坑PermissionError:13权限拒绝最容易踩坑AI经常忘记处理Excel文件被占用的场景如果不做行数校验全脏数据的时候会生成一份无意义报表误导使用者区分哪些字段是关键字段不能无脑全部字段dropna会错误丢掉有效业务数据。4.Vibe Coding感悟Vibe Coding不等于AI全自动写代码人是总指挥。如果直接把一大段考题丢给AIAI经常会忽略边界条件、异常处理。先把需求拆解、输入输出、异常场景写清楚再分段交给AI生成每一小段代码运行验证人工review风险点最后做整体测试才能得到健壮可用的程序。九、拓展思考当前代码可以继续优化写入Excel采用临时文件原子替换防止脚本中途崩溃生成损坏的report.xlsx可以增加日志模块把运行日志输出保存到日志文件而不是仅仅打印控制台。