code: def addcol(msname, colname=None, shape=None,
             data_desc_type='array', valuetype=None, init_with=0, **kw):
      
      import numpy
      import pyrap.tables
      tab = pyrap.tables.table(msname,readonly=False)
  
      try: 
          tab.getcol(colname)
          print('Column already exists')
  
      except RuntimeError:
          print('Attempting to add %s column to %s'%(colname,msname))
  
          from pyrap.tables import maketabdesc
          valuetype = valuetype or 'complex'
  
          if shape is None: 
              dshape = list(tab.getcol('DATA').shape)
              shape = dshape[1:]
  
          if data_desc_type=='array':
              from pyrap.tables import makearrcoldesc
              coldmi = tab.getdminfo('DATA') # God forbid this (or the TIME) column doesn't exist
              coldmi['NAME'] = colname.lower()
              tab.addcols(maketabdesc(makearrcoldesc(colname,init_with,shape=shape,valuetype=valuetype)),coldmi)
  
          elif data_desc_type=='scalar':
              from pyrap.tables import makescacoldesc
              coldmi = tab.getdminfo('TIME')
              coldmi['NAME'] = colname.lower()
              tab.addcols(maketabdesc(makescacoldesc(colname,init_with,valuetype=valuetype)),coldmi)
  
          print('Column added successfuly.')
  
          if init_with:
              nrows = dshape[0]
  
              rowchunk = nrows//10 if nrows > 1000 else nrows
              for row0 in range(0,nrows,rowchunk):
                  nr = min(rowchunk,nrows-row0)
                  dshape[0] = nr
                  tab.putcol(colname,numpy.ones(dshape,dtype=valuetype)*init_with,row0,nr)
  
      tab.close()
docs: add column to MS 
          msanme : MS to add colmn to
          colname : column name
          shape : shape
          valuetype : data type 
          data_desc_type : 'scalar' for scalar elements and array for 'array' elements
          init_with : value to initialise the column with