def insert_data_point(self, new_data, index=None):
        """
        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.
        """

        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
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.