code: def _netcdf2pandas(self, netcdf_data, query_variables, start, end):
          
          # set self.time
          try:
              time_var = 'time'
              self.set_time(netcdf_data.variables[time_var])
          except KeyError:
              # which model does this dumb thing?
              time_var = 'time1'
              self.set_time(netcdf_data.variables[time_var])
  
          data_dict = {}
          for key, data in netcdf_data.variables.items():
              # if accounts for possibility of extra variable returned
              if key not in query_variables:
                  continue
              squeezed = data[:].squeeze()
              if squeezed.ndim == 1:
                  data_dict[key] = squeezed
              elif squeezed.ndim == 2:
                  for num, data_level in enumerate(squeezed.T):
                      data_dict[key + '_' + str(num)] = data_level
              else:
                  raise ValueError('cannot parse ndim > 2')
  
          data = pd.DataFrame(data_dict, index=self.time)
          # sometimes data is returned as hours since T0
          # where T0 is before start. Then the hours between
          # T0 and start are added *after* end. So sort and slice
          # to remove the garbage
          data = data.sort_index().loc[start:end]
          return data
docs: Transforms data from netcdf to pandas DataFrame.
  
          Parameters
          ----------
          data: netcdf
              Data returned from UNIDATA NCSS query.
          query_variables: list
              The variables requested.
          start: Timestamp
              The start time
          end: Timestamp
              The end time
  
          Returns
          -------
          pd.DataFrame