2014-06-16 28 views
0

我有這個代碼在一個巨大的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] 
+0

可能重複的[遍歷numpy數組](http://stackoverflow.com/questions/6967463/iterating-over-a-numpy-array) – BeetDemGuise

回答

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] 
0

@brechmos有它。更明確地說,enumerate允許您在遍歷迭代器時跟蹤任何迭代器的隱式索引。

phrase = 'green eggs and spam': 
for ii, word in enumerate(phrase.split()): 
    print "Word %d is %s" % (ii, word)