docs: def mapping(dictionary, mapping):
      """
      takes in a dictionary and a mapping which contains new key names,
      and returns a new dictionary with the updated key names, i.e.:
      dictionary = {'a': 1, 'b': 2, 'c': 3}
      mapping = {'a': 'aa', 'c': 'cc'}
      mapped_dictionary = mapping(dictionary, mapping)
      mapped_dictionary = {'aa': 1, b, 2, 'cc': 3}
      """
      mapped_dictionary = {}
      for key, value in dictionary.items():
          if key in list(mapping.keys()):
              new_key = mapping[key]
              # if there is already a mapped value, try to figure out which value to use
              # (i.e., if both er_synthetic_name and er_specimen_name are in one measurement file)
              if new_key in mapped_dictionary:
                  if hasattr(value, 'any'):
                      if not value.any():
                          # if new value is null, leave the old value there
                          continue
                      if hasattr(mapped_dictionary, 'any'):
                          if value.any() and not mapped_dictionary[new_key].any():
                              # choose the one that has a non-null value
                              mapped_dictionary[new_key] = value
                          elif value.any() and mapped_dictionary[new_key].any():
                              # if both have values, choose which one to replace and warn
                              #print('-W- Two possible values found for {}'.format(new_key))
                              #print('    Replacing {} with {}'.format(mapped_dictionary[new_key], value))
                              mapped_dictionary[new_key] = value
                      else:
                          if value.any() and not mapped_dictionary[new_key].any():
                              # choose the one that has a non-null value
                              mapped_dictionary[new_key] = value
                          elif value.any() and mapped_dictionary[new_key].any():
                              # if both have values, choose which one to replace and warn
                              #print('-W- Two possible values found for {}'.format(new_key))
                              #print('    Replacing {} with {}'.format(mapped_dictionary[new_key], value))
                              mapped_dictionary[new_key] = value
                  else:
                      if not value:
                          # if new value is null, leave the old value there
                          continue
                      elif value and not mapped_dictionary[new_key]:
                          # choose the one that has a non-null value
                          mapped_dictionary[new_key] = value
                      elif value and mapped_dictionary[new_key]:
                          # if both have values, choose which one to replace and warn
                          #print('-W- Two possible values found for {}'.format(new_key))
                          #print('    Replacing {} with {}'.format(mapped_dictionary[new_key], value))
                          mapped_dictionary[new_key] = value
              # if there is no mapped_value already:
              else:
                  mapped_dictionary[new_key] = value
          else:
              # if this line is left in, it gives everything from the original dictionary
              mapped_dictionary[key] = value
      return mapped_dictionary