我有这段代码在庞大的csv文件中寻找特定值。对于文件中列2的那些值是223.2516,它被表示为“ row [2]”,列3中的那些值是58.053,它被表示为“ row [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]
问题看起来很熟悉。使用枚举。例如:
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]
@@ brechmos拥有。更明确地说,enumerate
允许您在迭代时跟踪任何迭代器的隐式索引。
enumerate
输出...
phrase = 'green eggs and spam':
for ii, word in enumerate(phrase.split()):
print("Word %d is %s" % (ii, word))