不用pandas用csv.DictReader读CSV算总销售额报TypeError如何解决?
错误原因
- 原代码未导入
csv模块,调用csv.DictReader时会首先触发模块未找到错误 - 循环中每次都将
sales变量覆盖为当前行的单个浮点型销售额数值,循环结束后sales仅为最后一行的销售额数值,是不可迭代的float类型,sum()函数要求传入可迭代对象(如列表、元组),因此触发TypeError - 原逻辑未做利润字段的统计,不满足需求要求的输出指标
修复后可运行的完整代码
import csv path = "Superstore.csv" # 初始化累加变量 total_sales = 0.0 total_profit = 0.0 with open(path, "r", encoding="utf-8") as store_data: reader = csv.DictReader(store_data) for row in reader: # 累加销售额,默认值0避免字段缺失报错 total_sales += float(row.get("Sales", 0)) # 累加利润 total_profit += float(row.get("Profit", 0)) # 输出统计报告 print("=== 销售数据统计报告 ===") print(f"总销售额:{total_sales:.2f}") print(f"总利润:{total_profit:.2f}")
代码说明
- 采用直接累加的方式计算总数值,不需要额外存储所有行的数值,内存占用更低
- 为
dict.get()方法设置默认值0,避免CSV文件某行缺少对应字段时触发转换报错 - 输出时保留2位小数,符合金额类统计的展示习惯
内容的提问来源于stack exchange,提问作者Tong Wei Jun
相关产品推荐
相关产品推荐

