ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

考题一:Excel 报表生成脚本

考题一:Excel 报表生成脚本 一项目背景和需求背景某团队每月有一份 sales_raw.xlsx字段为 日期、销售员、产品、数量、单价、地区存在空值、重复行与负数量等脏数据。需求编写 Python 脚本读取原始表完成清洗与统计输出 report.xlsx。要求1. 数据清洗删除关键字段缺失的行剔除数量0 的异常行按全字段去重2. 统计维度按销售员汇总销售额数量×单价按地区汇总销售额并给出月度总额3. 输出 report.xlsx含明细清洗后按销售员按地区总览四个工作表4. 约束不得修改原始文件对缺失字段、空文件、无有效数据等情况需给出明确报错或提示。验收标准给定样例数据能一键运行生成正确报表统计数值与人工核对一致异常输入不崩溃且有可读提示。二项目文件结构三原始数据说明四核心代码import os import pandas as pd def generate_sales_report(input_file: str sales_raw.xlsx, output_file: str report.xlsx): key_columns [销售员, 数量, 单价, 地区] all_columns [日期, 销售员, 产品, 数量, 单价, 地区] # 1. 判断输入文件是否存在 if not os.path.exists(input_file): print(f【错误】输入文件 {input_file} 不存在请检查文件是否放在当前目录) return try: df_raw pd.read_excel(input_file) except Exception as e: print(f【错误】读取Excel文件失败{str(e)}) return # 判断原始文件是否为空 if df_raw.empty: print(【提示】原始Excel文件没有任何数据) writer pd.ExcelWriter(output_file, engineopenpyxl) pd.DataFrame().to_excel(writer, sheet_name明细清洗后, indexFalse) pd.DataFrame().to_excel(writer, sheet_name按销售员, indexFalse) pd.DataFrame().to_excel(writer, sheet_name按地区, indexFalse) pd.DataFrame().to_excel(writer, sheet_name总览, indexFalse) writer.close() return # 判断是否缺少关键字段 missing_cols [c for c in key_columns if c not in df_raw.columns] if missing_cols: print(f【错误】原始文件缺少关键字段{,.join(missing_cols)}必须包含{,.join(key_columns)}) return original_rows df_raw.shape[0] # 数据清洗 df_clean df_raw.copy() # 1 删除关键字段为空的行 df_clean df_clean.dropna(subsetkey_columns) # 2 过滤数量 0 df_clean df_clean[df_clean[数量] 0] # 3 全字段去重 df_clean df_clean.drop_duplicates(subsetall_columns, keepfirst) clean_rows df_clean.shape[0] drop_rows original_rows - clean_rows # 判断清洗完是否还有有效数据 if df_clean.empty: print(f【警告】清洗完成后无有效业务数据原始行数:{original_rows},丢弃行数:{drop_rows}) writer pd.ExcelWriter(output_file, engineopenpyxl) pd.DataFrame().to_excel(writer, sheet_name明细清洗后, indexFalse) pd.DataFrame().to_excel(writer, sheet_name按销售员, indexFalse) pd.DataFrame().to_excel(writer, sheet_name按地区, indexFalse) overview_df pd.DataFrame([{ 原始总行数: original_rows, 清洗后有效行数: clean_rows, 丢弃行数: drop_rows, 月度总销售额: 0 }]) overview_df.to_excel(writer, sheet_name总览, indexFalse) writer.close() return # 计算每行销售额 df_clean[销售额] df_clean[数量] * df_clean[单价] # 统计聚合 # 按销售员汇总 df_salesman df_clean.groupby(销售员, as_indexFalse).agg({销售额: sum}) df_salesman df_salesman.sort_values(销售额, ascendingFalse) # 按地区汇总 df_area df_clean.groupby(地区, as_indexFalse).agg({销售额: sum}) df_area df_area.sort_values(销售额, ascendingFalse) # 月度总览 total_sales df_clean[销售额].sum() overview_df pd.DataFrame([{ 原始总行数: original_rows, 清洗后有效行数: clean_rows, 丢弃行数: drop_rows, 月度总销售额: total_sales }]) # 写入多sheet Excel 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) overview_df.to_excel(writer, sheet_name总览, indexFalse) print(f【成功】报表已经生成 {output_file}) print(f原始行数:{original_rows} | 清洗有效行数:{clean_rows} |丢弃:{drop_rows}|月度总销售额:{total_sales:.2f}) if __name__ __main__: generate_sales_report()五:运行测试与结果1.正常数据运行2.原始文件不存在将sales_raw.xlsx移出项目文件夹再次运行代码。3. 全部为无效脏数据修改sales_raw.xlsx将所有数量改为负数保存后运行六总结使用 pandas 完成 Excel 读取、数据清洗、分组统计一行代码实现多 sheet 写入。增加异常捕获与边界判断覆盖文件丢失、空数据、脏数据等异常场景鲁棒性强。自动输出多维度销售报表减少人工 Excel 统计提升数据分析效率。项目结构规范包含依赖声明、说明文档方便他人复现运行。
返回列表