docs: def df_uniprot_metadata(self):
          """DataFrame: Pandas DataFrame of UniProt metadata per protein."""
          uniprot_pre_df = []
          df_cols = ['gene', 'uniprot', 'reviewed', 'gene_name', 'kegg', 'refseq', 'num_pdbs', 'pdbs', 'ec_number',
                     'pfam', 'seq_len', 'description', 'entry_date', 'entry_version', 'seq_date', 'seq_version',
                     'sequence_file', 'metadata_file']
  
          for g in self.genes:
              uniprot_mappings = g.protein.filter_sequences(UniProtProp)
              for uniprot_prop in uniprot_mappings:
                  uniprot_dict = uniprot_prop.get_dict(df_format=True, only_attributes=df_cols)
                  uniprot_dict['gene'] = g.id
                  uniprot_pre_df.append(uniprot_dict)
  
          df = pd.DataFrame.from_records(uniprot_pre_df, columns=df_cols).set_index('gene')
          if df.empty:
              log.warning('Empty dataframe')
              return df
          else:
              return ssbio.utils.clean_df(df)