在取平均值之前筛选出负数

时间:2013-07-12 19:53:39

标签: python average multiple-columns

我有这个程序来读取数据,平均每行三行,然后是平均下行列,到目前为止它确实很好。但是我现在正试图回过头来拿出负数据点,我遇到了一些麻烦:

from __future__ import division
import csv
v = open("Pt_2_Test_Data.csv", 'wb') #created file to write output to
A =[]
B = []
with open("test2.xls") as w:
    w.next()  # skip over header row
    for row in w:
        (date, time, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t,
         u, LZA, SZA, LAM) = row.split("\t")  # split columns into fields

        A.append([(float(a) + float(b) + float(c))/3,
         (float(d) + float(e) + float(f))/3,
         (float(g) + float(h) + float(i))/3,
         (float(j) + float(k) + float(l))/3,
         (float(m) + float(n) + float(o))/3,
         (float(p) + float(q) + float(r))/3,
         (float(s) + float(t) + float(u))/3])

def mean(B):
        return sum(B) / len(B)
for x in A:
        if x > 0:
                B.append(x)

print B
C = map(mean, zip(*B))
print C    

v.close()

(我并不担心将数据写入文件,只是在最终平均值之前消除负数。)

1 个答案:

答案 0 :(得分:2)

我不确定这是什么意思,但你可以改变你的平均功能:

def mean(B):
        positives = [b for b in B if b >= 0] 
        return sum(positives) / len(positives)

这将为您提供B的非负成员的平均值。这是您要找的那种吗?

一般来说,这种理解是获取列表中非负成员的一种方法。另一种对我来说更有意义的方法是

filter (lambda i: i >=0, some_list)
但是,这似乎正在进行一些弃用。