'Insert values along the given axis before the given indices and return
a new `~astropy.table.MaskedColumn` object.
Parameters
obj : int, slice or sequence of ints
Object that defines the index or indices before which ``values`` is
inserted.
values : array_like
Value(s) to insert.  If the type of ``values`` is different
from that of quantity, ``values`` is converted to the matching type.
``values`` should be shaped so that it can be broadcast appropriately
mask : boolean array_like
Mask value(s) to insert.  If not supplied then False is used.
axis : int, optional
Axis along which to insert ``values``.  If ``axis`` is None then
the column array is flattened before insertion.  Default is 0,
which will insert a row.
Returns
out : `~astropy.table.MaskedColumn`
A copy of column with ``values`` and ``mask`` inserted.  Note that the
insertion does not occur in-place: a new masked column is returned.'

def insert(self, obj, values, mask=None, axis=0):

    self_ma = self.data
    if (self.dtype.kind == u'O'):
        new_data = np.insert(self_ma.data, obj, None, axis=axis)
        new_data[obj] = values
    else:
        values = np.asarray(values, dtype=self.dtype)
        new_data = np.insert(self_ma.data, obj, values, axis=axis)
    if (mask is None):
        if (self.dtype.kind == u'O'):
            mask = False
        else:
            mask = np.zeros(values.shape, dtype=np.bool)
    new_mask = np.insert(self_ma.mask, obj, mask, axis=axis)
    new_ma = np.ma.array(new_data, mask=new_mask, copy=False)
    out = new_ma.view(self.__class__)
    out.parent_table = None
    out.indices = []
    out._copy_attrs(self)
    return out
