docs: def clean_data(self, resample=True, freq='h', resampler='mean',
                      interpolate=True, limit=1, method='linear',
                      remove_na=True, remove_na_how='any', 
                      remove_outliers=True, sd_val=3, 
                      remove_out_of_bounds=True, low_bound=0, high_bound=9998):
          """ Clean dataframe.
  
          Parameters
          ----------
          resample                : bool
              Indicates whether to resample data or not.
          freq                    : str
              Resampling frequency i.e. d, h, 15T...
          resampler               : str
              Resampling type i.e. mean, max.
          interpolate             : bool
              Indicates whether to interpolate data or not.
          limit                   : int
              Interpolation limit.
          method                  : str
              Interpolation method.
          remove_na               : bool
              Indicates whether to remove NAs or not.
          remove_na_how           : str
              Specificies how to remove NA i.e. all, any...
          remove_outliers         : bool
              Indicates whether to remove outliers or not.
          sd_val                  : int
              Standard Deviation Value (specifices how many SDs away is a point considered an outlier)
          remove_out_of_bounds    : bool
              Indicates whether to remove out of bounds datapoints or not.
          low_bound               : int
              Low bound of the data.
          high_bound              : int
              High bound of the data.
  
          """
  
          # Store copy of the original data
          data = self.original_data
  
          if resample:
              try:
                  data = self.resample_data(data, freq, resampler)
              except Exception as e:
                  raise e
  
          if interpolate:
              try:
                  data = self.interpolate_data(data, limit=limit, method=method)
              except Exception as e:
                  raise e
          
          if remove_na:
              try:
                  data = self.remove_na(data, remove_na_how)
              except Exception as e:
                  raise e
  
          if remove_outliers:
              try:
                  data = self.remove_outliers(data, sd_val)
              except Exception as e:
                  raise e
  
          if remove_out_of_bounds:
              try:
                  data = self.remove_out_of_bounds(data, low_bound, high_bound)
              except Exception as e:
                  raise e
  
          self.cleaned_data = data