Logical OR and logical AND seems do not work when list have np.NaN. I produced simple example: If I will have ndarray filled with np.NaN, it do not work correctly:
import numpy as np
m =10
l1, l2 = np.array([np.NaN] * m), np.array([np.NaN] * m)
l1[3] = 5
l2[3] = 5
l1[5] = 6
l2[5] = 6
l2[7] = 7
l1[8] = 8
mask1 = (l1 != np.NaN) & (l2 != np.NaN)
mask0 = (l1 == np.NaN) | (l2 == np.NaN)
print("Lists:")
print(l1)
print(l2)
print()
print("Masks:")
print(mask1)
print(mask0)
It prints:
Lists:
[nan nan nan 5. nan 6. nan nan 8. nan]
[nan nan nan 5. nan 6. nan 7. nan nan]
Masks:
[ True True True True True True True True True True] # not true
[False False False False False False False False False False] # not true
I expected:
Masks:
[False False False True False True False False False False]
[ True True True False True False True True True True]
I made a test and I changed np.NaN to None and this fix a problem with logical operation, but before in my code I calculate items from lists and I have to compare items to value. Then I am getting TypeError:
TypeError: '<' not supported between instances of 'NoneType' and 'int'
How to change all np.NaN to None?