code: def _load_gtf_as_dataframe(self, usecols=None, features=None):
          
          logger.info("Reading GTF from %s", self.gtf_path)
          df = read_gtf(
              self.gtf_path,
              column_converters={
                  "seqname": normalize_chromosome,
                  "strand": normalize_strand,
              },
              infer_biotype_column=True,
              usecols=usecols,
              features=features)
  
          column_names = set(df.keys())
          expect_gene_feature = features is None or "gene" in features
          expect_transcript_feature = features is None or "transcript" in features
          observed_features = set(df["feature"])
  
          # older Ensembl releases don't have "gene" or "transcript"
          # features, so fill in those rows if they're missing
          if expect_gene_feature and "gene" not in observed_features:
              # if we have to reconstruct gene feature rows then
              # fill in values for 'gene_name' and 'gene_biotype'
              # but only if they're actually present in the GTF
              logger.info("Creating missing gene features...")
              df = create_missing_features(
                  dataframe=df,
                  unique_keys={"gene": "gene_id"},
                  extra_columns={
                      "gene": {
                          "gene_name",
                          "gene_biotype"
                      }.intersection(column_names),
                  },
                  missing_value="")
              logger.info("Done.")
  
          if expect_transcript_feature and "transcript" not in observed_features:
              logger.info("Creating missing transcript features...")
              df = create_missing_features(
                  dataframe=df,
                  unique_keys={"transcript": "transcript_id"},
                  extra_columns={
                      "transcript": {
                          "gene_id",
                          "gene_name",
                          "gene_biotype",
                          "transcript_name",
                          "transcript_biotype",
                          "protein_id",
                      }.intersection(column_names)
                  },
                  missing_value="")
              logger.info("Done.")
  
          return df
docs: Parse this genome source's GTF file and load it as a Pandas DataFrame