def METHOD_NAME(self, if_empty: str = "warn") -> pd.DataFrame:
    """Download data into a pandas DataFrame.
    Note that Supermetric can calculate some fields on the fly and alias them in the
    returned result. For example, if the query requests the `position` field,
    Supermetric may return an `Average position` caclulated field.
    For this reason we take columns names from the actual results rather than from input fields.
    Args:
        if_empty (str, optional): What to do if query returned no data. Defaults to "warn".
    Returns:
        pd.DataFrame: the DataFrame containing query results
    """
    try:
        columns = self._get_col_names()
    except ValueError:
        columns = None
    data = self.to_json()["data"]
    if data:
        df = pd.DataFrame(data[1:], columns=columns).replace("", np.nan)
    else:
        df = pd.DataFrame(columns=columns)
    if df.empty:
        self._handle_if_empty(if_empty)
    return df