-- coding: utf-8 --

“”"
《自动周报》实战脚本:把分散在多张 CSV 里的销售明细,
一键 合并 → 清洗 → 汇总 → 导出成 Excel 周报。

依赖:pip install pandas openpyxl
运行:python auto_weekly_report.py
首次运行会自动在 sales_raw/ 下造一批示例数据(含脏数据),开箱即跑。
“”"

import pandas as pd
import glob
import os
import random

DATA_DIR = “sales_raw”
OUTPUT = “周报_汇总.xlsx”

def 造示例数据():
“”“没有原始数据就自动造一批(含脏数据),保证开箱即跑。”“”
os.makedirs(DATA_DIR, exist_ok=True)
random.seed(42)
for day in (“周一”, “周二”, “周三”):
n = 50
rows = []
for i in range(n):
rows.append({
“日期”: day,
“销售员”: random.choice([“张三”, “李四”, “王五”, None]),
“地区”: random.choice([“华东”, “华南”, “华北”]),
“金额”: random.choice([“缺失”] + [random.randint(100, 5000) for _ in range(5)]),
“订单号”: 1000 + i,
})
pd.DataFrame(rows).to_csv(
os.path.join(DATA_DIR, f"销售_{day}.csv"),
index=False, encoding=“utf-8-sig”)
print(f"已在 {DATA_DIR}/ 造好示例数据")

def 合并明细(data_dir):
“”“目录下所有 CSV 拼成一张大表。”“”
files = glob.glob(os.path.join(data_dir, “*.csv”))
return pd.concat([pd.read_csv(f) for f in files], ignore_index=True)

def 清洗(df):
“”“去重 + 金额转数值(脏数据变 0)+ 销售员空值兜底。”“”
df = df.drop_duplicates()
df[“金额”] = pd.to_numeric(df[“金额”], errors=“coerce”).fillna(0)
df[“销售员”] = df[“销售员”].fillna(“未知”)
return df

def 出周报(df, output):
“”“按销售员汇总 + 按地区透视,导出多 sheet 的 Excel。”“”
by_person = (df.groupby(“销售员”)[“金额”]
.agg(总成交额=“sum”, 单数=“count”)
.sort_values(“总成交额”, ascending=False))
by_region = df.pivot_table(index=“地区”, values=“金额”,
aggfunc=“sum”, fill_value=0)
with pd.ExcelWriter(output, engine=“openpyxl”) as xw:
df.to_excel(xw, sheet_name=“原始明细”, index=False)
by_person.to_excel(xw, sheet_name=“按销售员”)
by_region.to_excel(xw, sheet_name=“按地区”)
return by_person, by_region

if name == “main”:
if not glob.glob(os.path.join(DATA_DIR, “*.csv”)):
造示例数据()
raw = 合并明细(DATA_DIR)
clean = 清洗(raw)
person, region = 出周报(clean, OUTPUT)
print(f"原始 {len(raw)} 行 → 清洗后 {len(clean)} 行")
print(“周报已生成:”, OUTPUT)
print(“\n按销售员 Top:”)
print(person.head())

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐