根据python中的条件选择数据

时间:2016-11-15 16:33:54

标签: python

到目前为止,我已经能够通过查看旧线程来解决大多数问题,但这次我找不到任何与当前问题有关的内容,所以我将尝试提出自己的问题。 / p>

我是Python新手并尝试根据数据中的条件加载一些数据。我的脚本看起来像这样:

infoPRD = []
with open('SpectraPRDinfo.txt') as inputfile:
for line in inputfile:
    infoPRD.append(line.strip().split(' '))

datesPRD = []

for j in range(2,len(infoPRD),2):
    datesPRD.append(float(infoPRD[j][3]))

因此,我在文本文件中检索信息,并在其中一列中写入值列表。结果是

  

[['fitsName','OBJECT','DATE-OBS','MJD-OBS','SNR'],    [ ''],

     

[ 'ADP.2016-03-18T01_03_02.067.fits',     “比邻 - 半人马座”,     '2016-03-17T09:05:48.326',     '57464.37903156',     '3.9'],    [ ''],

     

[ 'ADP.2016-09-09T09_40_26.314.fits',     “比邻 - 半人马座”,     '2016-02-15T09:13:39.222',     '57433.38448174',     '26 0.2' ],    [ ''],

等。并且所有日期(MJD-OBS)都被加载到名为datesPRD的列表中。

所以我需要做的是只考虑最后一个值('SNR')高于给定值(例如10)的数据。因此,如果SNR值太低或者我之后可以删除数据,我应该在加载文件时跳过这些行。我想第一个选择会更好,但任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

如果您的数据按字符排列成行和列,则应使用csv模块进行处理。

import csv
with open(filename, newline='') as f:
    r = csv.DictReader(f, delimiter=' ')
    datesPRD = [float(row['SNR']) for row in r if float(row['SRD']) > 10]

答案 1 :(得分:0)

您可以通过迭代所有行并跳过不具有10以上的最后一个值的行来完成此操作。

当然,我们必须跳过没有足够元素的行,并将我们的数字从字符串转换为十进制类型。

for line in datesPRD[1:]:
    if len(line) > 5:
        if decimal(line[4]) >= 10:
            # Do something with the line here.

答案 2 :(得分:0)

你可以做到

int testarr[]={1,2,3};