I have a long list of tuples and want to remove any tuple that has a nan in it using Python.
What I currently have: x = [(\'Recording start\', 0), (nan, 4), (nan, 7
At least at my python usage of nan retured the 'not defined error', this is why I defined it by my self. I think you can use a Python filter function for yor needs. See the example:
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
[('Recording start', 0), ('Event marker 1', 150)]
res = [n for n in x if not nan in n]
Return all objects in x
that do not have an objects nan
in them.
You could use list comprehension which checks if any of the items in a tuple is NaN. Check is done by first checking the type and then with math.isnan since it doesn't work for other types:
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)
Output:
[('Recording start', 0), ('Event marker 1', 150)]
Using list comprehension:
x = [('Recording start', 0), (nan, 4), (nan, 7), ('Event marker 1', 150)]
new = [i for i in x if nan not in i]