def print_data_frame(df, sep=" ", index=False, header=True, show=True):
    """Print formatted data frame.
    
    Args:
        df (:obj:`pd.DataFrame`): Data frame to print.
        sep (str): Separator for columns. True or " " to print the data 
            frame with a space-separated table, or can provide an 
            alternate separator. Defaults to " ".
        index (bool): True to show index; defaults to False.
        header (bool): True to show header; defaulst to True.
        show (bool): True to print the formatted data frame; defaults to True.
    
    Returns:
        str: The formatted data frame.
    
    """
    if sep is True or sep == " ":
        df_str = df.to_string(index=index, header=header, na_rep="NaN")
    else:
        df_str = df.to_csv(sep=sep, index=index, header=header, na_rep="NaN")
    if show:
        print(df_str)
    return df_str