numpy 1.9.0 has the function nanmedian:
nanmedian(a, axis=None, out=None, overwrite_input=False, keepdims=False)
Compute the median along the specified axis, while ignoring NaNs.
Returns the median of the array elements.
.. versionadded:: 1.9.0
E.g.
>>> from numpy import nanmedian, NaN
>>> nanmedian([1,2,3,NaN,NaN,NaN,NaN,NaN,NaN])
2.0
If you can't use version 1.9.0 of numpy, something like @Parker's answer will work; e.g.
>>> import numpy as np
>>> x = np.array([1,2,3,NaN,NaN,NaN,NaN,NaN,NaN])
>>> np.median(x[~np.isnan(x)])
2.0
or
>>> np.median(x[np.isfinite(x)])
2.0
(When applied to a boolean array, ~ is the unary operator notation for not.)
numpy 1.9.0 has the function nanmedian:
nanmedian(a, axis=None, out=None, overwrite_input=False, keepdims=False)
Compute the median along the specified axis, while ignoring NaNs.
Returns the median of the array elements.
.. versionadded:: 1.9.0
E.g.
>>> from numpy import nanmedian, NaN
>>> nanmedian([1,2,3,NaN,NaN,NaN,NaN,NaN,NaN])
2.0
If you can't use version 1.9.0 of numpy, something like @Parker's answer will work; e.g.
>>> import numpy as np
>>> x = np.array([1,2,3,NaN,NaN,NaN,NaN,NaN,NaN])
>>> np.median(x[~np.isnan(x)])
2.0
or
>>> np.median(x[np.isfinite(x)])
2.0
(When applied to a boolean array, ~ is the unary operator notation for not.)
I would clean the list of all NaN's, and then get the median of the cleaned list. There're two ways that come to mind. If you're using the numpy library, you can do:
x = x[numpy.logical_not(numpy.isnan(x))]
where x is the list you want to get the median of
Or, if you just want to use the included libraries you can do:
import math
x = [value for value in x if not math.isnan(value)]
Then to get the median just use the cleaned list: `median(x)``