Masking Values in Time Series#

Warning

Note that masking does not yet work for columns that have units.

Masking values is done in the same way as for Table objects (see Masking and Missing Values). The most convenient way to use masking is to initialize a TimeSeries object using the masked=True option.

Example#

We start by initializing a TimeSeries object with masked=True:

>>> from astropy import units as u
>>> from astropy.timeseries import TimeSeries
>>> ts = TimeSeries(time_start='2016-03-22T12:30:31',
...                 time_delta=3 * u.s,
...                 n_samples=5, masked=True)

We can now add some data to our time series:

>>> ts['flux'] = [1., -2., 5., -1., 4.]

As you can see, some of the values are negative. We can mask these using:

>>> ts['flux'].mask = ts['flux'] < 0
>>> ts
<TimeSeries masked=True length=5>
          time            flux
          Time          float64
----------------------- -------
2016-03-22T12:30:31.000     1.0
2016-03-22T12:30:34.000      --
2016-03-22T12:30:37.000     5.0
2016-03-22T12:30:40.000      --
2016-03-22T12:30:43.000     4.0

We can also access the mask values:

>>> ts['flux'].mask
array([False,  True, False,  True, False]...)

Masks are column-based, so masking a single cell does not mask the whole row. Having masked cells then allows functions that normally understand masked values and operate on columns to ignore the masked entries:

>>> import numpy as np
>>> np.min(ts['flux'])
np.float64(1.0)
>>> np.ma.median(ts['flux'])
np.float64(4.0)