code: def insert_data_point(self, new_data, index=None):
          
  
          if not len(new_data) == len(self.columns) and not len(self.columns)==0:
              print("ERROR: new_data must have as many elements as there are columns.")
              return
  
          # otherwise, we just auto-add this data point as new columns
          elif len(self.columns)==0:
              for i in range(len(new_data)): self[i] = [new_data[i]]
  
          # otherwise it matches length so just insert it.
          else:
              for i in range(len(new_data)):
  
                  # get the array and turn it into a list
                  data = list(self[i])
  
                  # append or insert
                  if index is None: data.append(       new_data[i])
                  else:             data.insert(index, new_data[i])
  
                  # reconvert to an array
                  self[i] = _n.array(data)
          
          return self
docs: Inserts a data point at index n.
          
          Parameters
          ----------
          new_data    
              A list or array of new data points, one for each column.
          index       
              Where to insert the point(s) in each column. None => append.