Python 统计 CSV 销售额前 10 名:一份可直接运行的汇总脚本与三个常见坑
【摘要】 用 Python 读取 CSV 按产品汇总销售额并输出前 10 名:给出可直接运行的脚本与 DevSpace 运行步骤,以及 BOM 编码、金额格式、脏数据三个常见坑。
日常工作中经常遇到这样的需求:手头有一份销售明细 CSV,想快速知道哪些产品卖得最好。今天在华为云 AI 开发者空间(DevSpace)体验版里实测了这个任务,记录一份能直接运行的脚本和三个容易踩的坑。
一、数据长什么样
假设文件是 sales.csv,表头三列:产品、销售额、日期,例如:
产品,销售额,日期
无线耳机,1299.00,2026-11-01
机械键盘,899.50,2026-11-02
无线耳机,1299.00,2026-11-03
目标是按产品汇总销售额,输出排名前 10 的产品。
二、完整脚本
import csv
from collections import defaultdict
def clean_amount(text):
text = (text or "").strip().replace(",", "").replace("¥", "").replace("元", "")
return float(text) if text else 0.0
def top_products(csv_path, top_n=10):
totals = defaultdict(float)
with open(csv_path, encoding="utf-8-sig", newline="") as f:
reader = csv.DictReader(f)
for row in reader:
product = (row.get("产品") or "").strip()
if not product:
continue
try:
totals[product] += clean_amount(row.get("销售额", ""))
except ValueError:
continue
return sorted(totals.items(), key=lambda kv: kv[1], reverse=True)[:top_n]
if __name__ == "__main__":
for i, (name, total) in enumerate(top_products("sales.csv"), start=1):
print(f"{i:>2}. {name:<12} {total:>12,.2f}")
三、在 DevSpace 里怎么运行
- 把
sales.csv和脚本放在同一个工作目录,例如/root/workspace; - 打开终端,执行
python3 sales_summary.py; - 输出示例:
1. 无线耳机 2,598.00
2. 机械键盘 899.50
四、三个常见坑
1. 编码带 BOM,表头读出来是乱码。 Excel 导出的 CSV 常带 UTF-8 BOM,用 encoding="utf-8" 打开时第一列列名会变成 \ufeff产品,row.get("产品") 永远取不到值。改成 utf-8-sig 可以自动去掉 BOM。
2. 金额里有千分位逗号或货币符号。 float("1,299.00") 会直接报错。先去掉逗号、¥、元 再转换;转换失败的行跳过并计数,不要让整批数据因为一行脏数据中断。
3. 空行和缺失值。 明细里常有空行或产品名为空的行,product 为空就跳过;销售额 为空按 0 处理。另外注意表头重复或多余空格,先用 strip() 处理列名和取值。
五、发布前的核查清单
- 用
print(reader.fieldnames)先确认表头确实是['产品', '销售额', '日期']; - 汇总总金额与原始明细求和核对一次;
- 排序用金额倒序,不要按字符串排序,否则
900会排在1000前面。
这个小脚本只有几十行,但把编码、金额格式和脏数据三处处理好,就可以放心地用在日常报表里了。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)