python中基于条件的数据选择

2024-04-25 11:43:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我是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', 'Proxima-Centauri', '2016-03-17T09:05:48.326', '57464.37903156', '3.9'], [''],

['ADP.2016-09-09T09_40_26.314.fits', 'Proxima-Centauri', '2016-02-15T09:13:39.222', '57433.38448174', '26.2'], [''],

所有日期(MJD-OBS)都被加载到一个名为datesPRD的列表中。你知道吗

所以我需要做的是只考虑最后一个值('SNR')高于给定值(例如10)的数据。如果信噪比太低,我要么在加载文件时跳过行,要么在加载后删除数据。我想第一种选择会更好,但任何帮助都将不胜感激。你知道吗


Tags: 数据in列表forlinefitsappendobs
3条回答

如果您的数据被排列成由字符分隔的行和列,您应该使用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]

你能做到的

with open('SpectraPRDinfo.txt', 'r') as inputfile:
    infoPRD = [x.split(' ') for x in inputfile.readlines()
               if x and int(x.split(' ')[-1]) > 10]

通过遍历所有行并跳过最后一个值不超过10的行来实现这一点。你知道吗

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

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

相关问题 更多 >