Python如何计算CSV文件中指定列的浮点数总和
问题修正方案
原有代码的错误点
- 代码开头没有导入
csv模块,直接调用csv.reader会直接报错 - 调用
list(giftReader)之后,csv.reader迭代器已经被遍历耗尽,后续的for row in giftReader不会执行任何循环逻辑 csv.reader返回的每行是下标索引的列表,不是字典,不能用row['amount']的方式取值,要按列名取需要用csv.DictReader- 逻辑混淆了原始数据存储和求和逻辑,
giftData一开始存了整个CSV的所有行,后续直接累加row['amount']到列表里,完全不符合求和的需求 - 读取的amount值是字符串格式,还可能带有前后空格,需要先做清洗再转成浮点数才能计算总和
可运行的修正代码
import csv total_amount = 0.0 # 用with语句自动管理文件关闭,避免资源泄漏 with open('input.v0.small.csv', 'r', encoding='utf-8') as giftFile: # 用DictReader直接把表头作为键,后续可以按列名取数 giftReader = csv.DictReader(giftFile) giftData = list(giftReader) for row in giftData: # 兼容行缺失amount列、空值的异常场景 if row.get('amount'): amount_str = row['amount'].strip() if amount_str: total_amount += float(amount_str) # 匹配原代码的打印需求 print('row 0:' + str(list(giftData[0].keys()))) if len(giftData) >= 1: print("row 1's dollar value: " + giftData[0]['amount'].strip()) print(f'amount列合计值: {total_amount}')
运行结果说明
用你提供的CSV样例运行后,amount列合计值为103.27,符合预期。
内容的提问来源于stack exchange,提问作者Sandra
相关产品推荐
相关产品推荐

