docs: def fix_timezone(df, freq, tz=None):
      """ set timezone for pandas """
      index_name = df.index.name
  
      # fix timezone
      if isinstance(df.index[0], str):
          # timezone df exists
          if ("-" in df.index[0][-6:]) | ("+" in df.index[0][-6:]):
              df.index = pd.to_datetime(df.index, utc=False)
              df.index = df.index.tz_localize('UTC').tz_convert(tz)
  
          # no timezone df - do some resampling
          else:
              # original range
              start_range = df.index[0]
              end_range = df.index[-1]
  
              # resample df
              df.index = pd.to_datetime(df.index, utc=True)
              df = resample(df, resolution=freq, ffill=False, dropna=False)
  
              # create date range
              new_freq = ''.join(i for i in freq if not i.isdigit())
              rng = pd.date_range(start=start_range,
                                  end=end_range, tz=tz, freq=new_freq)
  
              # assign date range to df and drop empty rows
              df.index = rng
              df.dropna(inplace=True)
  
      # finalize timezone (also for timezone-aware df)
      df = set_timezone(df, tz=tz)
  
      df.index.name = index_name
      return df