def c(self, *args, **kwargs):
        """
        Takes a single argument or keyword argument, and returns the specified 
        column. If the argument (or keyword argument) is an integer, return the 
        n'th column, otherwise return the column based on key.
        
        If no arguments are supplied, simply print the column information.
        """
        # If not arguments, print everything
        if len(args) + len(kwargs) == 0:
            
            print("Columns")
            if len(self.ckeys)==0: print ('  No columns of data yet.')
            
            # Loop over the ckeys and display their information
            for n in range(len(self.ckeys)):
                print('  '+str(n)+': '+str(self.ckeys[n])+' '+str(_n.shape(self[n])))
            return

        # Otherwise, find n        
        elif len(args):   n = args[0]
        elif len(kwargs): 
            for k in kwargs: n = kwargs[k]
        
        # Nothing to do here.
        if len(self.columns) == 0:   return None
        
        # if it's a string, use it as a key for the dictionary
        if type(n)   is str: return self.columns[n]

        # if it's a list, return the specified columns
        if type(n) in [list, tuple, range]:
            output = []
            for i in n: output.append(self[i])
            return output

        # If it's a slice, do the slice thing
        if type(n) is slice:
            start = n.start
            stop  = n.stop
            step  = n.step

            # Fix up the unspecifieds
            if start == None: start = 0
            if stop  == None or stop>len(self): stop  = len(self)
            if step  == None: step  = 1
            
            # Return what was asked for
            return self[range(start, stop, step)]
            
        # Otherwise assume it's an integer
        return self.columns[self.ckeys[n]]
def c ( self , * args , ** kwargs ) : if len ( args ) + len ( kwargs ) == 0 : print ( "Columns" ) if len ( self . ckeys ) == 0 : print ( '  No columns of data yet.' ) for n in range ( len ( self . ckeys ) ) : print ( '  ' + str ( n ) + ': ' + str ( self . ckeys [ n ] ) + ' ' + str ( _n . shape ( self [ n ] ) ) ) return elif len ( args ) : n = args [ 0 ] elif len ( kwargs ) : for k in kwargs : n = kwargs [ k ] if len ( self . columns ) == 0 : return None if type ( n ) is str : return self . columns [ n ] if type ( n ) in [ list , tuple , range ] : output = [ ] for i in n : output . append ( self [ i ] ) return output if type ( n ) is slice : start = n . start stop = n . stop step = n . step if start == None : start = 0 if stop == None or stop > len ( self ) : stop = len ( self ) if step == None : step = 1 return self [ range ( start , stop , step ) ] return self . columns [ self . ckeys [ n ] ]
Takes a single argument or keyword argument, and returns the specified 
        column. If the argument (or keyword argument) is an integer, return the 
        n'th column, otherwise return the column based on key.
        
        If no arguments are supplied, simply print the column information.