Python进程数据统计在dictionary中使用元组时运行非常慢

2024-10-01 19:26:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个python脚本来计算文件中项目的最小值、最大值和平均值。 但是程序在几百行之后运行得越来越慢。我可以让perl非常快地完成同样的事情,但是我想学习Python中正确的方法。有什么办法加快速度吗?在

import sys
import re


filename = sys.argv[1]
resultFile = open(filename, 'r')

netTbl = {}
count = 0;
# Target file line example: "itemA: 0.110"
matchLine = re.compile( r"(.*):\s+([0-9\.]+)" )
for line in resultFile:
    result = matchLine.match(line);
    if( result ) :
        count +=1 
        if( count%10000 == 0 ): print str(count) + ":" + str(len(netTbl))

        name =  result.group(1)
        value = result.group(2)

        if( netTbl.has_key(name) ):
            ( minVal, maxVal, avgVal, numOfInsts ) = netTbl[name]

            if( maxVal < value ): maxVal = value
            if( minVal > value ): minVal = value

            avgVal += value
            numOfInsts += 1
            netTbl[name] = ( minVal, maxVal, avgVal, numOfInsts)
        else:
            netTbl[name] = (value, value, value, 1)

输入文件如下所示

^{pr2}$

我知道答案了。我忘了把价值投给浮动。所以绳子越来越大了。更正代码

#value = result.group(2)
value = float(result.group(2))

Tags: 文件nameimportifvaluecountsysline
1条回答
网友
1楼 · 发布于 2024-10-01 19:26:21

我建议使用pandas进行统计计算,以下是工作示例:

import pandas as pn
file_name = './exmp.txt'
names = ['class', 'value']
df = pn.read_csv(file_name, sep=': ', names=names, engine='python')
print 'Max values'
print df.groupby('class').max()
print 'Min values'
print df.groupby('class').min() 
print 'Avr values'
print df.groupby('class').mean()

产出量为:

^{pr2}$

Pandas使用简单的SQL-like-group-by语法,因此它易于使用且计算速度快

相关问题 更多 >

    热门问题