Python excel出现负数和正数的次数(count / frequency)

我希望python来计算一个负数和正数出现在二进制[1正数和0负数]的次数。 此外,我希望python计算总数有多less正数的百分比。 在使用python excel的时候,我很难弄明白这一点。

这是我现在的代码

import csv with open('Weather30states.csv', 'r') as file1: val = list(csv.reader(file1))[2] val1 = val[0:4] with open('FL%.csv', 'r') as file2: reader = csv.reader(file2) reader.next() # this skips the first row of the file # this iteration will start from the second row of file2.csv conditionMet = False for row in reader: if conditionMet == True: print "FA,",row[0],',', ','.join(row[1:5]) conditionMet = False # or break if you know you only need at most one line if row[1:5] == val1: conditionMet = True 

当我运行这个代码时,我在输出窗口中得到的是这个

 FA, -1.97% , 0,0,1,0 FA, -0.07% , 0,0,1,1 FA, 0.45% , 0,1,1,1 FA, -0.07% , 0,0,1,1 FA, -0.28% , 0,0,1,1 

我想得到的是这个

 1, 0, FA, -1.97% , 0,0,1,0 2, 0, FA, -0.07% , 0,0,1,1 3, 1, FA, 0.45% , 0,1,1,1 4, 0, FA, -0.07% , 0,0,1,1 5, 0, FA, -0.28% , 0,0,1,1 Total Count = 5 Percentage of Positive numbers = .20 % 

有人可以帮助我这个麻烦。 谢谢

使用两个计数器variables来跟踪总数和正数。 在开始时将它们设置为0,然后在你的循环内部,每当你想添加1时,使用+= 1来递增它们。

然后通过删除百分比符号来testing百分比是否大于0,然后使用if float(row[0].strip('%')) > 0将该string转换为数字。 如果要在“正”类别中包括0,则可以将其更改为>=

 totalCount = 0 numberOfPositives = 0 with open('FL%.csv', 'r') as file2: reader = csv.reader(file2) reader.next() # this skips the first row of the file # this iteration will start from the second row of file2.csv conditionMet = False for row in reader: if conditionMet == True: if float(row[0].strip('%')) > 0: # change > to >= if you want to count 0 as positive print "FA, 1",row[0],',', ','.join(row[1:5]) # print 1 if positive numberOfPositives += 1 # add 1 to numberOfPositives only if positive else: print "FA, 0",row[0],',', ','.join(row[1:5]) # print 0 if not positive totalCount += 1 # add 1 to totalCount regardless of sign conditionMet = False # or break if you know you only need at most one line if row[1:5] == val1: conditionMet = True 

然后,您可以从totalCountnumberOfPositives计算所需的总和和百分比:

 print 'Total Count =', totalCount print 'Percentage of Positive numbers =', numberOfPositives * 100./totalCount, '%'