code: def outliers(df,output_type = 'values',dtype = 'number',sensitivity = 1.5):# can output boolean array or values
      
      if dtype in ('number','datetime','timedelt','datetimetz'):
          if not dtype == 'number':
              df = pd.to_numeric(df,errors = 'coerce')
          quart25, quart75 = percentiles(df,q = [.25,.75]) 
          out_range= sensitivity * (quart75 - quart25)
          lower_bound,upper_bound = quart25-out_range, quart75+out_range
          bool_array = (df < lower_bound)|(df > upper_bound)
      else:
          value_counts = df.value_counts() # Trying to find categorical outliers.
          quart25 = cum_percentile(value_counts,.25)
          quart75 = cum_percentile(value_counts,.75)
          out_values = int(sensitivity * (quart75 - quart25) + quart75 + 1)
          if out_values >= len(value_counts):
              bool_array = _utils.bc_vec(df,value = False)
          else:
              outlier_values = value_counts[value_counts <= value_counts.iloc[out_values]].index
              bool_array = df.isin(outlier_values)
          
      if output_type == 'values':
          return  df[bool_array]
      return bool_array
docs: Returns potential outliers as either a boolean array or a subset of the original.
      Parameters:
      df - array_like
          Series or dataframe to check
      output_type - string, default 'values'
          if 'values' is specified, then will output the values in the series that are suspected
          outliers. Else, a boolean array will be outputted, where True means the value is an outlier
      dtype - string, default 'number'
          the way to treat the object. Possible values are 'number','datetime',
          'timedelt','datetimetz','category',or 'object'
      sensitivity - number, default 1.5
          The value to multipy by the iter-quartile range when determining outliers. This number is used
          for categorical data as well.