docs: def df_proteins(self):
          """DataFrame: Get a summary dataframe of all proteins in the project."""
          pre_df = []
          df_cols = ['gene', 'id', 'sequences', 'num_sequences', 'representative_sequence',
                     'repseq_gene_name', 'repseq_uniprot', 'repseq_description',
                     'num_structures', 'experimental_structures', 'num_experimental_structures',
                     'homology_models', 'num_homology_models',
                     'representative_structure', 'representative_chain', 'representative_chain_seq_coverage',
                     'repstruct_description', 'repstruct_resolution',
                     'num_sequence_alignments', 'num_structure_alignments']
  
          for g in self.genes:
              # Get per protein DataFrame
              protein_dict = g.protein.protein_statistics
              protein_dict['gene'] = g.id
              pre_df.append(protein_dict)
  
          df = pd.DataFrame.from_records(pre_df, columns=df_cols).set_index('gene')
          if df.empty:
              log.warning('Empty dataframe')
              return df
          else:
              return ssbio.utils.clean_df(df)