在Python中从列表中删除索引

时间:2013-07-18 18:03:49

标签: python list list-comprehension

我正在尝试获得如下输出:

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

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

3 个答案:

答案 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']