Python如何对CSV多列分别求和求平均值并生成结果列表
实现CSV列求和及平均值计算的代码方案
原代码存在的问题
- 语法层面:缩进不规范,for循环内的代码、if/else分支的缩进都存在错误,会直接触发语法报错
- 逻辑层面:仅处理了A列的数值收集,未覆盖剩余列;将求和、求平均的逻辑放在遍历每行的循环内部,存在不必要的重复计算;最终存储结果的变量名不匹配(预定义的是
final_list,实际调用的是不存在的data变量) - 扩展性差:如果后续CSV的数值列数量变化,需要手动增删对应列的存储列表,维护成本高
可直接运行的实现代码
import csv # 初始化存储每列总和的列表 col_sums = [] line_count = 0 # 读取CSV文件 with open("file.csv", "r", encoding="utf-8") as f: reader = csv.reader(f) for row in reader: # 跳过表头行,同时初始化总和列表长度 if line_count == 0: # 数值列从第二列开始,所以长度是总列数减1 col_sums = [0] * (len(row) - 1) line_count += 1 continue # 累加每列的数值 for idx in range(1, len(row)): col_sums[idx-1] += int(row[idx]) line_count += 1 # 计算平均值,按需求转成对应格式的字符串 data_row_num = line_count - 1 # 减去表头的1行 final_list = [] for sum_val in col_sums: avg = sum_val / data_row_num if avg.is_integer(): final_list.append(str(int(avg))) else: # 保留三位小数 final_list.append(f"{avg:.3f}") # 输出结果和示例完全一致:['2', '3', '2.667', '2.333'] print(final_list)
结果写入CSV的示例
如果需要把最终列表写入新的CSV文件,可以直接调用csv模块实现:
with open("result.csv", "w", encoding="utf-8", newline="") as f: writer = csv.writer(f) # 写入表头 writer.writerow(["A", "B", "C", "D"]) # 写入平均值结果 writer.writerow(final_list)
内容的提问来源于stack exchange,提问作者Mathhurtsmybrain
相关产品推荐
相关产品推荐

