Returns a normalized version of the input Dataframe
    Parameters:
    df - pandas DataFrame
        The input data to normalize
    col_names - list or string, default None
        The column(s) to use when computing the norms
    row_names - list or string, default None
        The row(s) to use when computing the norms
    style - function or string, default 'mean'
        The style to use when computing the norms. Takes 'mean' or 'minmax' to
        do mean or min-max normalization respectively. User-defined functions that take
        a pandas Series as input and return a normalized pandas Series are also accepted
    as_group - bool, default False
        Whether to normalize accross the entire range or by row/column. If true, will normalize
        by the entire DataFrame
    axis - int or string, default 0
        Which axis to perform the normalization on. Accepts 0 or 'columns' to do normalization by
        columns, and 1 or 'rows' to do normalization by rows

def norms(df, col_names = None,row_names = None,style = 'mean', as_group = False, axis = 0):
    """ Returns a normalized version of the input Dataframe
    Parameters:
    df - pandas DataFrame
        The input data to normalize
    col_names - list or string, default None
        The column(s) to use when computing the norms
    row_names - list or string, default None
        The row(s) to use when computing the norms
    style - function or string, default 'mean'
        The style to use when computing the norms. Takes 'mean' or 'minmax' to
        do mean or min-max normalization respectively. User-defined functions that take
        a pandas Series as input and return a normalized pandas Series are also accepted
    as_group - bool, default False
        Whether to normalize accross the entire range or by row/column. If true, will normalize
        by the entire DataFrame
    axis - int or string, default 0
        Which axis to perform the normalization on. Accepts 0 or 'columns' to do normalization by
        columns, and 1 or 'rows' to do normalization by rows
    """
    if col_names is None:
        if row_names is not None:
            df = df.loc[row_names,:]
    else:
        if row_names is None:
            df = df.loc[:,col_names]
        else:
            df = df.loc[row_names,col_names]
    if as_group:
        return normalize(df,style)
    if axis == 0 or str(axis).startswith('column'):
        return _pd.concat([col_normalize(df,col_name,style) for col_name in df.columns],axis = 1)
    elif axis == 1 or str(axis).startswith('row'):
        return _pd.concat([row_normalize(df,row_name,style) for row_name in df.index])
    else:
        return normalize(df,style)