如何计算文件中大于或等于某个数字的数字的百分比

时间:2017-03-17 14:49:25

标签: python math percentage

我有一个用逗号分隔的CSV文件。我需要读取文件,确定哪些行包含一个需要高于给定数字的数字(比如711),并计算符合条件的那些数字的百分比。

到目前为止我的代码如下:

myfile = open('3517315a.csv','r')

myfilecount = 0

linecount = 0

firstline = True

for line in myfile:
    if firstline:
        firstline = False
        continue
fields = line.split(',')

    linecount += 1
    count = int(fields[0])
    colour = str(fields[1])
    channels = int(fields[2])
    code = str(fields[3])
    correct = str(fields[4])
    reading = float(fields[5])

print( 'percentage of numbers greater than or equal to 711 is %d:')

我不知道如何设置条件然后计算百分比。

2 个答案:

答案 0 :(得分:0)

您可以使用awk命令执行此操作: -

cat 3517315a.csv | awk -F ',' 'BEGIN{count=0;total=0;}{total++;if($1>=711)count++;}END{print 100*count/total}'

说明: -

awk -F ',' - 指定字段分隔符

BEGIN{count=0;total=0;} - 首次初始化变量。

{total++;if($1>=711)count++;} - 对文件中的每一行执行。对于每一行,total递增,对于那些> = 711,计数递增。

END{print 100*count/total} - 在解析所有行之后执行。 Percentage=count*100/total

答案 1 :(得分:0)

假设您只对第一个字段(计数)进行计数感兴趣,那么代码可以是:

MAGIC_NUMBER = 711

counter = 0
myfile = open('3517315a.csv', 'r')

myfile.readline()  # Skip the first line

for i, line in enumerate(myfile, 1):
    count = int(line.split(',')[0])

    if count >= MAGIC_NUMBER:
        counter += 1

percentage = float(counter) / i * 100
print('%3.2f%% of numbers is >= %d' % (percentage, MAGIC_NUMBER))

您可以使用enumerate自动获取一系列数字,在这种情况下,从1开始从line读取每个myfile

因为我们只对第一个字段感兴趣,并且我们知道split方法返回一个列表,所以我们只取第一个元素(索引0)。我们将此号码转换为数字(int)。

然后你需要根据给定的条件计算这些数字。

我们处理完文件后,i会保留最后读取的行数。所以我们可以计算百分比。请注意在其中一个数字中使用float。这是告诉操作员/我们想要float作为结果。