docs: def _fetch_dataframe(self):
          """Return a pandas dataframe with all the training jobs, along with their
          hyperparameters, results, and metadata. This also includes a column to indicate
          if a training job was the best seen so far.
          """
          def reshape(training_summary):
              # Helper method to reshape a single training job summary into a dataframe record
              out = {}
              for k, v in training_summary['TunedHyperParameters'].items():
                  # Something (bokeh?) gets confused with ints so convert to float
                  try:
                      v = float(v)
                  except (TypeError, ValueError):
                      pass
                  out[k] = v
              out['TrainingJobName'] = training_summary['TrainingJobName']
              out['TrainingJobStatus'] = training_summary['TrainingJobStatus']
              out['FinalObjectiveValue'] = training_summary.get('FinalHyperParameterTuningJobObjectiveMetric',
                                                                {}).get('Value')
  
              start_time = training_summary.get('TrainingStartTime', None)
              end_time = training_summary.get('TrainingEndTime', None)
              out['TrainingStartTime'] = start_time
              out['TrainingEndTime'] = end_time
              if start_time and end_time:
                  out['TrainingElapsedTimeSeconds'] = (end_time - start_time).total_seconds()
              return out
          # Run that helper over all the summaries.
          df = pd.DataFrame([reshape(tjs) for tjs in self.training_job_summaries()])
          return df