在Python中从列表中删除索引
我正在尝试获得如下输出:在Python中从列表中删除索引,python,list,list-comprehension,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'] 在这里,我试图
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
语法来自一个专门的程序,但是你得到了这个想法,而没有显示你如何读取数据,解决方案只能猜测 但是,如果
HDU\u数据
存储真实的NaN
值,请尝试以下操作:
将变量与NaN
s进行比较不适用于等式运算符=
:
foo == nan
其中nan
和foo都是nan
s给出的总是false
改用math.isnan()
:
import math
...if math.isnan(Data)…
根据我对你描述的理解,这可能有效
with open('path/to/file') as infile:
for line in infile:
vals = line.strip().split(',')
print[v for v in vals if v!='nan']
此语句为您提供了一个元组列表。然后将元组与字符串进行比较。所有的
=代码>比较成功。你能给我们举一个这样一行的例子吗?这一行给出了你想要的输出:打印(“169.764569892,572870.0,19.6976”)
。当然我会把它添加到编辑中,还有为什么会被否决?你的帖子中有一个错误的输出样本很好,但是请显示一个从文件编辑的样本行,以解决所有问题。如果他从文件中读取,那么他不会得到一个字符串吗?如果'nan'
在文本文件中,它不会是nan
对象;它将是实际的字符串。所以这个检查不会真的起作用,除非你想加入一个ast.literal\u eval
或者我的观点。而且OP不执行literal\u eval
,因此它们应该是字符串。当然,如果它存储为nan
,并且没有被任何读入转换,那么它是一个字符串,应该与一起使用!='nan'
。我没有看到他读取数据的任何代码,所以我们都只是猜测;-)
TData_Pre_Out = map(itemgetter(0, 7, 8), HDU_DATA)