我有很长的元组列表,并希望使用Python删除任何包含nan的元组。
我现在有什么: x = [('录制开始',0),(nan,4),(nan,7),...,('事件标记1',150)]
结果我正在寻找: x = [('录制开始',0),('事件标记1',150)]
我尝试过使用np.isnan及其变体,但没有成功并且一直收到错误:输入类型不支持ufunc'isnan',输入无法安全地强制转换为任何支持类型根据投射规则“安全”
任何建议将不胜感激!
答案 0 :(得分:3)
您可以使用列表推导来检查元组中的任何项是否为NaN。首先检查类型,然后使用math.isnan
进行检查,因为它不适用于其他类型:
library(dplyr)
dcast(df, Time ~ ...) %>% select(Time, Speed, Acc, Energy)
Time Speed Acc Energy
10 10 -2 10
15 9 -1 NA
20 9 0 2
输出:
import math
x = [('Recording start', 0), (float('nan'), 4), (float('nan'), 7), ('Event marker 1', 150)]
res = [t for t in x if not any(isinstance(n, float) and math.isnan(n) for n in t)]
print(res)
答案 1 :(得分:1)
使用列表理解:
x = [('Recording start', 0), (nan, 4), (nan, 7), ('Event marker 1', 150)]
new = [i for i in x if nan not in i]
答案 2 :(得分:0)
res = [n for n in x if not nan in n]
返回x
中没有对象nan
的所有对象。
答案 3 :(得分:0)
至少在我对python的使用中,nan恢复了未定义的错误',这就是我自己定义它的原因。 我认为您可以使用Python过滤器功能来满足您的需求。参见示例:
nan = float('nan')
lst = [('Recording start', 0), (nan, 4), (nan, 7), ('Event marker 1', 150)]
y = filter( lambda x: nan not in x, lst)
print y
[('录制开始',0),('事件标记1',150)]