packages/vaex-core/vaex/dataframe.py
def ordinal_encode(self, column, values=None, inplace=False):
        """Encode column as ordinal values and mark it as categorical.

        The existing column is renamed to a hidden column and replaced by a numerical columns
        with values between [0, len(values)-1].
        """
        column = _ensure_string_from_expression(column)
        df = self if inplace else self.copy()
        # for the codes, we need to work on the unfiltered dataset, since the filter
        # may change, and we also cannot add an array that is smaller in length
        df_unfiltered = df.copy()
        # maybe we need some filter manipulation methods
        df_unfiltered.select_nothing(name=FILTER_SELECTION_NAME)
        df_unfiltered._length_unfiltered = df._length_original
        df_unfiltered.set_active_range(0, df._length_original)
        # codes point to the index of found_values
        # meaning: found_values[codes[0]] == ds[column].values[0]
        found_values, codes = df_unfiltered.unique(column, return_inverse=True)
        if values is None:
            values = found_values
        else:
            # we have specified which values we should support, anything
            # not found will be masked
            translation = np.zeros(len(found_values), dtype=np.uint64)
            # mark values that are in the column, but not in values with a special value
            missing_value = len(found_values)
            for i, found_value in enumerate(found_values):
                try:
                    found_value = found_value.decode('ascii')
                except:
                    pass
                if found_value not in values:  # not present, we need a missing value
                    translation[i] = missing_value
                else:
                    translation[i] = values.index(found_value)
            codes = translation[codes]
            if missing_value in translation:
                # all special values will be marked as missing
                codes = np.ma.masked_array(codes, codes==missing_value)

        original_column = df.rename_column(column, '__original_' + column, unique=True)
        labels = [str(k) for k in values]
        df.add_column(column, codes)
        df._categories[column] = dict(labels=labels, N=len(values), values=values)
        return df
def ordinal_encode(self, column, values=None, inplace=False):
        column = _ensure_string_from_expression(column)
        df = self if inplace else self.copy()
        # for the codes, we need to work on the unfiltered dataset, since the filter
        # may change, and we also cannot add an array that is smaller in length
        df_unfiltered = df.copy()
        # maybe we need some filter manipulation methods
        df_unfiltered.select_nothing(name=FILTER_SELECTION_NAME)
        df_unfiltered._length_unfiltered = df._length_original
        df_unfiltered.set_active_range(0, df._length_original)
        # codes point to the index of found_values
        # meaning: found_values[codes[0]] == ds[column].values[0]
        found_values, codes = df_unfiltered.unique(column, return_inverse=True)
        if values is None:
            values = found_values
        else:
            # we have specified which values we should support, anything
            # not found will be masked
            translation = np.zeros(len(found_values), dtype=np.uint64)
            # mark values that are in the column, but not in values with a special value
            missing_value = len(found_values)
            for i, found_value in enumerate(found_values):
                try:
                    found_value = found_value.decode('ascii')
                except:
                    pass
                if found_value not in values:  # not present, we need a missing value
                    translation[i] = missing_value
                else:
                    translation[i] = values.index(found_value)
            codes = translation[codes]
            if missing_value in translation:
                # all special values will be marked as missing
                codes = np.ma.masked_array(codes, codes==missing_value)

        original_column = df.rename_column(column, '__original_' + column, unique=True)
        labels = [str(k) for k in values]
        df.add_column(column, codes)
        df._categories[column] = dict(labels=labels, N=len(values), values=values)
        return df
def ordinal_encode ( self , column , values = None , inplace = False ) : column = _ensure_string_from_expression ( column ) df = self if inplace else self . copy ( ) # for the codes, we need to work on the unfiltered dataset, since the filter # may change, and we also cannot add an array that is smaller in length df_unfiltered = df . copy ( ) # maybe we need some filter manipulation methods df_unfiltered . select_nothing ( name = FILTER_SELECTION_NAME ) df_unfiltered . _length_unfiltered = df . _length_original df_unfiltered . set_active_range ( 0 , df . _length_original ) # codes point to the index of found_values # meaning: found_values[codes[0]] == ds[column].values[0] found_values , codes = df_unfiltered . unique ( column , return_inverse = True ) if values is None : values = found_values else : # we have specified which values we should support, anything # not found will be masked translation = np . zeros ( len ( found_values ) , dtype = np . uint64 ) # mark values that are in the column, but not in values with a special value missing_value = len ( found_values ) for i , found_value in enumerate ( found_values ) : try : found_value = found_value . decode ( 'ascii' ) except : pass if found_value not in values : # not present, we need a missing value translation [ i ] = missing_value else : translation [ i ] = values . index ( found_value ) codes = translation [ codes ] if missing_value in translation : # all special values will be marked as missing codes = np . ma . masked_array ( codes , codes == missing_value ) original_column = df . rename_column ( column , '__original_' + column , unique = True ) labels = [ str ( k ) for k in values ] df . add_column ( column , codes ) df . _categories [ column ] = dict ( labels = labels , N = len ( values ) , values = values ) return df
Encode column as ordinal values and mark it as categorical.

        The existing column is renamed to a hidden column and replaced by a numerical columns
        with values between [0, len(values)-1].
Encode column as ordinal values and mark it as categorical .