在python中分类和计算一些东西

时间:2014-03-12 04:17:56

标签: python numpy categorization

我有以下输入文件

O    2.05151  39.51234   0.00000
O   32.69451   1.48634   8.31300
O   10.53351  21.63634   7.95400
O   30.37451  20.74134   0.99700
Si   8.06451  19.19434  10.21700
Si  32.03251  42.98634  21.23900
O    9.69051  19.06934  16.27200
Si   2.18351  39.67034  11.36500
Si  31.78351   2.38334   1.42300

......

首先,我希望根据第4列对这些数据进行分类,例如 [0~1,1~2,2~3,....,max-1~max] 然后计算' Si'和' O'在每个部分。之后,根据这些数字进行一些计算然后打印出来。打印格式设置为

section1   number_of_Si_in_section1   number_of_O_in_section1   add_two_numbers
...

有三个空格分开 我试图使用嵌套for循环,但失败了。

for i1 in range (total number of lines) 
    for j1 in range (each sections) 
            if (at_name[j1] = 'Si'):
            num_Si = num_Si + 1
            if (at_name[j1] = 'O'):
            num_O = num_O + 1

这样的东西,但我卡在中间。我听说numpy,csvanal或其他功能可以轻松完成,但我不知道它们。

1 个答案:

答案 0 :(得分:0)

您应该在Python解释器中逐行测试此代码的一小部分内容。您将看到小错误(就像您使用单个等于而不是双等于检查相等性)。

循环中的任何内容都不依赖于i1,所以看起来这个循环会一次又一次地做同样的事情。此外,您应该使用字典(或者更好的是collections.Counter):

import collections
import csv

f = open('myfile.csv','rb')
reader = csv.reader(f, delimiter='\t')

si_counter = collections.Counter()
o_counter = collections.Counter()

for line in reader:
    number = int(line[3])
    si_or_o = line[0]
    if si_or_o == 'Si':
        si_counter[number] += 1
    elif si_or_o == 'O':
        o_counter[number] += 1

代码未经测试,您可以改进它。