如何根据行属性对指定列元素分组求和?代码返回0问题排查
解决多维数组按行属性求和的问题
我帮你排查下代码里的问题,你现在求和结果都是0,主要是这几个地方出了错:
- 字符串与整数的比较不匹配:
csv.reader读取出来的每一行元素都是字符串类型,你直接拿row[6]和整数1、0比较,永远不会相等,所以两个条件块根本没执行,求和变量自然一直是初始的0。 - 累加运算符写错了:你用的
=+是赋值正数值的意思,不是累加操作,正确的累加应该用+=。 - 求和变量未初始化:如果在循环前没给
sumNSal和sumNSalR设置初始值0,第一次执行累加时会报错,所以必须先初始化。
修正后的代码如下:
import csv # 记得导入csv模块哦 sumNSal = 0 sumNSalR = 0 with open(filePath + fileName, 'rt') as inputfile2: next(inputfile2) # 跳过表头 dataArray = csv.reader(inputfile2, delimiter='\t') for row in dataArray: # 先把row[6]转成整数再比较 if int(row[6]) == 1: sumNSal += int(row[4]) # 用+=做累加 elif int(row[6]) == 0: sumNSalR += int(row[4]) print(sumNSal, sumNSalR)
另外补充两个小建议:
- 用
elif替代第二个if,这样逻辑更严谨,避免同一行被两个条件同时判断(虽然这里row[6]只能是0或1,但习惯上用elif更高效)。 - 如果你的数据里可能存在空值或者非数字的情况,可以加个异常处理,比如用
try-except包裹转换整数的操作,避免程序崩溃。
内容的提问来源于stack exchange,提问作者Philip
相关产品推荐
相关产品推荐

