pythonlisttuplesnanspyder

Remove a tuple containing nan in list of tuples -- Python


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), ..., ('Event marker 1', 150)]

Result I'm looking for: x = [('Recording start', 0), ('Event marker 1', 150)]

I've tried use np.isnan and variants of that, but have had no success and keep getting an error: ufunc 'isnan' is not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule "safe"

Any suggestions would be appreciated!!


Solution

  • 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)]