docs: def make_dataframe(table, clean=True, verbose=False, **kwargs):
      """Coerce a provided table (QuerySet, list of lists, list of Series)
      >>> dt = datetime.datetime
      >>> make_dataframe([[1,2,3],[4,5,6]])
         0  1  2
      0  1  2  3
      1  4  5  6
      >>> make_dataframe([])
      Empty DataFrame
      Columns: []
      Index: []
      >>> make_dataframe([OrderedDict([('a', 2), ('b', 3)]), PrettyDict([('a', 4), ('b', 5)])])
         a  b
      0  2  3
      1  4  5
      >>> make_dataframe([[dt(2700, 1, 1), dt(2015, 11, 2)], [(2700 - 2015) * 365.25 + 60, 1]]).T
                                           0       1
      0  2262-04-11 23:47:16.854775+00:00  250256
      1            2015-11-02 00:00:00+00:00       1
      """
      if hasattr(table, 'objects') and not callable(table.objects):
          table = table.objects
      if hasattr(table, 'filter') and callable(table.values):
          table = pd.DataFrame.from_records(list(table.values()).all())
      elif isinstance(table, basestring) and os.path.isfile(table):
          table = pd.DataFrame.from_csv(table)
      # elif isinstance(table, ValuesQuerySet) or (isinstance(table, (list, tuple)) and
      #                                            len(table) and all(isinstance(v, Mapping) for v in table)):
      #     table = pd.DataFrame.from_records(table)
      try:
          table = pd.DataFrame(table, **kwargs)
      except (IndexError, ValueError, AttributeError, TypeError):
          table = pd.DataFrame(table)
      if clean and len(table) and isinstance(table, pd.DataFrame):
          if verbose:
              print('Cleaning up OutOfBoundsDatetime values...')
          for col in table.columns:
              if any_generated((isinstance(v, DATETIME_TYPES) for v in table[col])):
                  table[col] = clean_series(table[col])
          table = table.dropna(how='all')
      return table