<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def parse_cache(self, full_df):
 """ Format the cached data model into a dictionary of DataFrames and a criteria map DataFrame. Parameters full_df : DataFrame result of self.get_dm_offline() Returns data_model : dictionary of DataFrames crit_map : DataFrame """

        data_model = {}
        levels = ['specimens', 'samples', 'sites', 'locations',
                  'ages', 'measurements', 'criteria', 'contribution',
                  'images']
        criteria_map = pd.DataFrame(full_df['criteria_map'])
        for level in levels:
            df = pd.DataFrame(full_df['tables'][level]['columns'])
            data_model[level] = df.transpose()
        # replace np.nan with None
        data_model[level] = data_model[level].where((pd.notnull(data_model[level])), None)
        return data_model, criteria_map