def dataframe(url, downloader='default', *args, **kwargs):
    """Parse an App url and return a Pandas dataframe"""
    from . import parse_app_url
    import pandas as pd
    from itertools import islice
    u = parse_app_url(url, downloader=downloader, **kwargs)
    r = u.get_resource()
    t = r.get_target()
    g = t.generator
    try:
        return g.dataframe(*args, **kwargs)
    except AttributeError:
        pass
    headers = next(islice(g, 0, 1))
    data = islice(g, 1, None)
    df = pd.DataFrame(list(data), *args, columns=headers, **kwargs)
    df.metatab_errors = g.errors if hasattr(g, 'errors') and g.errors else {}
    return df
