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