def preprocess_data(self, data,
                        hdh_cpoint=65, cdh_cpoint=65, col_hdh_cdh=None,
                        col_degree=None, degree=None,
                        standardize=False, normalize=False,
                        year=False, month=False, week=False, tod=False, dow=False,
                        save_file=True):
        """ Preprocesses dataframe according to user specifications and stores result in self.preprocessed_data.

        Parameters
        ----------
        data            : pd.DataFrame()
            Dataframe to be preprocessed.
        hdh_cpoint      : int
            Heating degree hours. Defaults to 65.
        cdh_cpoint      : int
            Cooling degree hours. Defaults to 65.
        col_hdh_cdh     : str
            Column name which contains the outdoor air temperature.
        col_degree      : list(str)
            Column to exponentiate.
        degree          : list(str)
            Exponentiation degree.
        standardize     : bool
            Standardize data.
        normalize       : bool
            Normalize data.
        year            : bool
            Year.
        month           : bool
            Month.
        week            : bool
            Week.
        tod             : bool
            Time of Day.
        dow             : bool
            Day of Week.
        save_file       : bool
            Specifies whether to save file or not. Defaults to True.

        Returns
        -------
        pd.DataFrame()
            Dataframe containing preprocessed data.

        """

        # Check to ensure data is a pandas dataframe
        if not isinstance(data, pd.DataFrame):
            raise SystemError('data has to be a pandas dataframe.')
        
        # Create instance
        preprocess_data_obj = Preprocess_Data(data)
        if col_hdh_cdh:
            preprocess_data_obj.add_degree_days(col=col_hdh_cdh, hdh_cpoint=hdh_cpoint, cdh_cpoint=cdh_cpoint)
        preprocess_data_obj.add_col_features(col=col_degree, degree=degree)

        if standardize:
            preprocess_data_obj.standardize()
        if normalize:
            preprocess_data_obj.normalize()

        preprocess_data_obj.add_time_features(year=year, month=month, week=week, tod=tod, dow=dow)
        
        # Store preprocessed data in wrapper class
        self.preprocessed_data = preprocess_data_obj.preprocessed_data

        # Logging
        self.result['Preprocess'] = {
            'HDH CPoint': hdh_cpoint,
            'CDH CPoint': cdh_cpoint,
            'HDH CDH Calc Col': col_hdh_cdh,
            'Col Degree': col_degree,
            'Degree': degree,
            'Standardize': standardize,
            'Normalize': normalize,
            'Year': year,
            'Month': month,
            'Week': week,
            'Time of Day': tod,
            'Day of Week': dow,
            'Save File': save_file
        }

        if save_file:
            f = self.results_folder_name + '/preprocessed_data-' + str(self.get_global_count()) + '.csv'
            self.preprocessed_data.to_csv(f)
            self.result['Preprocess']['Saved File'] = f
        else:
            self.result['Preprocess']['Saved File'] = ''

        return self.preprocessed_data
Preprocesses dataframe according to user specifications and stores result in self.preprocessed_data.

        Parameters
        ----------
        data            : pd.DataFrame()
            Dataframe to be preprocessed.
        hdh_cpoint      : int
            Heating degree hours. Defaults to 65.
        cdh_cpoint      : int
            Cooling degree hours. Defaults to 65.
        col_hdh_cdh     : str
            Column name which contains the outdoor air temperature.
        col_degree      : list(str)
            Column to exponentiate.
        degree          : list(str)
            Exponentiation degree.
        standardize     : bool
            Standardize data.
        normalize       : bool
            Normalize data.
        year            : bool
            Year.
        month           : bool
            Month.
        week            : bool
            Week.
        tod             : bool
            Time of Day.
        dow             : bool
            Day of Week.
        save_file       : bool
            Specifies whether to save file or not. Defaults to True.

        Returns
        -------
        pd.DataFrame()
            Dataframe containing preprocessed data.