我正在尝试获得如下输出:
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
语法来自专门的程序,但你明白了
答案 0 :(得分:1)
如果没有显示您的数据读取方式,则只能猜测解决方案。
但是,如果HDU_DATA
存储了真实的NaN
值,请尝试以下操作:
将变量与NaN
进行比较不适用于等于运算符==
:
foo == nan
其中nan
和foo都是NaN
s总是假的。
改为使用math.isnan()
:
import math
...if math.isnan(Data)…
答案 1 :(得分:1)
TData_Pre_Out = map(itemgetter(0, 7, 8), HDU_DATA)
此声明为您提供元组列表。然后你将元组与字符串进行比较。所有!=
比较成功。
答案 2 :(得分: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']