def missing_summary(df):
    """
    Takes in a dataframe and 
    returns a summary of all
    missing values.
    
    Parameters:
    -----------
    
    df : dataframe
    
    Dataframe to calculate the
    missing summary from.
    
    Returns:
    --------
    
    df_miss : dataframe
    
    Missing values summary
    
    """

    # Copy for output
    df_out = df.copy()

    # Create a new summary dataframe
    # for each column.
    df_miss = df_out.notnull().sum().reset_index()
    df_miss["Missing"] = df_out.isnull().sum().values
    df_miss["Percentage Missing"] = (
        (df_miss["Missing"] / df_out.shape[0]) * 100
    ).round(1)

    # Rename all the columns
    df_miss.columns = ["Column", "Not-Null", "Missing", "Perc Missing (%)"]

    return df_miss