【发布时间】:2014-11-04 11:39:39
【问题描述】:
我有一个 10GB(无法放入 RAM)格式的文件:
Col1,Col2,Col3,Col4
1,2,3,4
34,256,348,
12,,3,4
所以我们有列和缺失值,我想计算第 2 列和第 3 列的平均值。使用普通 python,我会执行以下操作:
def means(rng):
s, e = rng
with open("data.csv") as fd:
title = next(fd)
titles = title.split(',')
print "Means for", ",".join(titles[s:e])
ret = [0] * (e-s)
for c, l in enumerate(fd):
vals = l.split(",")[s:e]
for i, v in enumerate(vals):
try:
ret[i] += int(v)
except ValueError:
pass
return map(lambda s: float(s) / (c + 1), ret)
但我怀疑有一种更快的方法可以用 numpy 进行瘦身(我还是个新手)。
【问题讨论】:
-
您希望总和除以行数,还是除以非缺失值的数量(对于每列)?
-
这并不重要,缺失值不应超过列的 1%,我对那么高的准确性不感兴趣。哪个更容易。