def search( self, keys, values, funcs='=', ret_raw=False, ret_all=True ): ''' aSrc : source numpy 2d-array keys : keys of target columns in self.cols values : data to be matched or None (get an entire column) func : ['=', '>', '<', '!=', ..., '~'] '~' for fuzzy searching ret : ['table', # 'array', # ] ret_raw : True # numpy array for all colums False # Table instance ret_all : True # return all columns False # return only selected columns e.g.) searchtable( aSrc, (0, 3, 2), ('test', 3000, None), ('~','>', None) ) ''' cols = [ self.cols.index( key ) for key in keys] if hasattr( keys, '__iter__') \ else [ self.cols.index( keys ) ] table = searchtable( self._table_, cols, values, funcs, ret_all ) if ret_raw: return table else: cols = self.cols if ret_all else [ self.cols[i] for i in cols ] return self.new_instance( table, cols )
def select(self, keys, values, fnComps): ''' * for sequential filetering e.g., grdc.filtered('m_yrs', 100, '>').filtered('area',10000, '>').filtered('river','amazon','~') ''' #table = self.search( keys, values, fnComps, ret_all=True ) cols = [self.cols.index( k ) for k in keys] if hasattr( keys, '__iter__') \ else self.cols.index( keys ) table = searchtable( self._table_, cols, values, fnComps, True ) if table.size == 0: raise ValueError, 'all records filtered out! [] returned!' else: self.filters[ keys ] = [values, fnComps] self._table_ = table return self