docs: def visit_addresses(frame, return_addresses):
      """
      Visits all of the addresses, returns a new dict
      which contains just the addressed elements
  
  
      Parameters
      ----------
      frame
      return_addresses: a dictionary,
          keys will be column names of the resulting dataframe, and are what the
          user passed in as 'return_columns'. Values are a tuple:
          (py_name, {coords dictionary}) which tells us where to look for the value
          to put in that specific column.
  
      Returns
      -------
      outdict: dictionary
  
      """
      outdict = dict()
      for real_name, (pyname, address) in return_addresses.items():
          if address:
              xrval = frame[pyname].loc[address]
              if xrval.size > 1:
                  outdict[real_name] = xrval
              else:
                  outdict[real_name] = float(np.squeeze(xrval.values))
          else:
              outdict[real_name] = frame[pyname]
  
      return outdict