0

我试图得到这样的输出:

169.764569892,  572870.0,  19.6976

但是我遇到了一个问题,因为我输入的文件的格式类似于我刚刚显示的输出,但是数据中的某些行将“nan”作为我需要删除的变量。我正在尝试使用它来这样做:

TData_Pre_Out = map(itemgetter(0, 7, 8), HDU_DATA) 
TData_Pre_Filter = [Data for Data in TData_Pre_Out if Data != 'nan']

在这里,我试图使用列表理解来让“nan”消失,但输出仍然显示它,任何有关正确过滤的帮助将不胜感激。

编辑:不正确的输出如下所示:

169.519361471,  nan,  nan

而不是我上面显示的。此外,还有更多信息:1)这是来自一个特殊的数据文件,而不是文本文件,所以分割行不起作用。2) 输入与输出完全相同,只是使用我在上面显示的 map() 行进行映射并拆分为我实际需要的索引(即,而不是使用所有数据列表,如 L = [(1,2 ,3),(3,4,5)] 我只从该列表中提取 1 和 3,以便为您提供数据结构的要点)数据是这样读入的:

with pyfits.open(allfiles) as HDU:
HDU_DATA = HDU[1].data

语法来自一个专门的程序,但你明白了

4

3 回答 3

1

在不显示您如何读取数据的情况下,只能猜测解决方案。

但是,如果HDU_DATA存储实际NaN值,请尝试以下操作:

将变量与NaNs 进行比较不适用于相等运算符==

foo == nan

wherenan和 foo are NaNs 总是错误的。

改用math.isnan()

import math
...if math.isnan(Data)…
于 2013-07-18T18:07:59.957 回答
1
TData_Pre_Out = map(itemgetter(0, 7, 8), HDU_DATA) 

该语句为您提供了一个元组列表。然后将元组与字符串进行比较。所有!=比较成功。

于 2013-07-18T18:09:55.903 回答
0

根据我对您的描述的理解,这可能有效

with open('path/to/file') as infile:
    for line in infile:
        vals = line.strip().split(',')
        print[v for v in vals if v!='nan']
于 2013-07-18T18:08:19.593 回答