docs: def df_pdb_metadata(self):
          """DataFrame: Get a dataframe of PDB metadata (PDBs have to be downloaded first)"""
          if self.num_structures == 0:
              log.error('No experimental PDB structures have been mapped to protein')
              return pd.DataFrame()
  
          pdb_pre_df = []
  
          not_showing_info = []
          for p in self.get_experimental_structures():
              if not p.structure_file:
                  not_showing_info.append(p.id)
                  log.debug('{}: PDB file has not been downloaded, run "pdb_downloader_and_metadata" \
                      to download all structures'.format(p.id))
                  continue
  
              infodict = p.get_dict(df_format=True)
              infodict['pdb_id'] = p.id
              pdb_pre_df.append(infodict)
  
          log.warning('Not showing info for mapped PDB entries, as they have not been downloaded yet. Run pdb_downloader_and_metadata')
  
          cols = ['pdb_id', 'pdb_title', 'description', 'experimental_method', 'mapped_chains',
                  'resolution', 'chemicals', 'date', 'taxonomy_name',
                  'structure_file']
          df = pd.DataFrame.from_records(pdb_pre_df, columns=cols).set_index('pdb_id')
          return ssbio.utils.clean_df(df)