输出行号及其中的值

问题描述 投票:0回答:2

我有这段代码在庞大的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]
python search csv output
2个回答
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允许您在迭代时跟踪任何迭代器的隐式索引。

enumerate

输出...

phrase = 'green eggs and spam':
for ii, word in enumerate(phrase.split()):
  print("Word %d is %s" % (ii, word))
© www.soinside.com 2019 - 2024. All rights reserved.