code: def read_hdf(cls,path,key=None):
          
          df = pd.read_hdf(path,key)
          df['scored_calls'] = df['scored_calls'].apply(lambda x: json.loads(x))
          df['channel_values'] = df['channel_values'].apply(lambda x: json.loads(x))
          df['regions'] = df['regions'].apply(lambda x: json.loads(x))
          df['phenotype_calls'] = df['phenotype_calls'].apply(lambda x: json.loads(x))
          df['neighbors'] = df['neighbors'].apply(lambda x: json.loads(x))
          df['neighbors'] = df['neighbors'].apply(lambda x:
                  np.nan if not isinstance(x,dict) else dict(zip([int(y) for y in x.keys()],x.values()))
              )
          df['frame_shape'] = df['frame_shape'].apply(lambda x: tuple(json.loads(x)))
          df = cls(df)
          f = h5py.File(path,'r')
          mpp = f[key].attrs["microns_per_pixel"]
          if not np.isnan(mpp): df.microns_per_pixel = mpp
          f.close()
          return df
docs: Read a CellDataFrame from an hdf5 file.
  
          Args:
              path (str): the path to read from
              key (str): the name of the location to read from
  
          Returns:
              CellDataFrame