我有这个代码在巨大的csv文件中查找某个值。对于文件中的列2,这些值是223.2516,表示为"行[2]"第3列为58.053,第3列为#34;行[3]"。我已经设置了代码,以便我可以在既定限制内找到接近这些值的任何内容。我知道文件中没有值223.2516,因此我正在查找代码中可以看到的相对较近的所有内容。最后两个命令给出了所有值的输出:
In [54]: [row[2] for row in data if abs(row[2]-223.25)<0.001]
Out[54]:
[223.24945646,
223.25013049,
223.25093125999999,
223.24943973000001,
223.24924296,
223.24958522]
和
In [55]: [row[3] for row in data if abs(row[3]-58.053)<0.001]
Out[55]:
[58.052124569999997,
58.052942659999999,
58.053108100000003,
58.053536250000001,
58.05346918,
58.053109259999999,
58.052188620000003,
58.052528559999999,
58.053201559999998,
58.052009560000002,
58.052036010000002,
58.053623790000003,
58.052450120000003,
58.052405720000003,
58.053431590000002,
58.053709660000003,
58.053117569999998,
58.052511709999997]
我遇到的问题是我需要两个值都在同一行内。我不是在寻找彼此独立的价值观。 223值和58.0值都必须在同一行,它们是坐标。 有没有办法只输出同一行或至少是那些值,打印每个值所在的行号,以及值? 这是我的代码:
import numpy
from matplotlib import *
from pylab import *
data = np.genfromtxt('result.csv',delimiter=',',skip_header=1, dtype=float)
[row[2] for row in data if abs(row[2]-223.25)<0.001]
[row[3] for row in data if abs(row[3]-58.053)<0.001]
答案 0 :(得分:1)
问题看起来很熟悉。使用枚举。举个例子:
data = [[3, 222], [8, 223], [1,224], [5, 223]]
A = [ [ind,row[0],row[1]] for ind,row in enumerate(data) if abs(row[1]-223)<1 ]
print A
[[1, 8, 223], [3, 5, 223]]
通过这种方式,您可以获得索引,并获得所需的值对。
采纳这个想法并转换回你的例子。如下所示:
[ [ind, row] for ind,row in enumerate(data) if abs(row[2]-223.25)<0.001]
答案 1 :(得分:0)
@brechmos拥有它。更明确地,enumerate
允许您在迭代任何迭代器时跟踪隐式索引。
phrase = 'green eggs and spam':
for ii, word in enumerate(phrase.split()):
print "Word %d is %s" % (ii, word)