To make it feasible to recover/schema change for instances like this in the future, I save saving all dataframes into a subfolder with the "/key=..." naming convention in the file name. So the filename looks like the following:

path = METRICS_DATA_FRAME_FILE_NAME + '/key={week}_{product}_{version}_{timestamp}'.format(week=self.week, product=self.product, version=latestVersion, timestamp=timestamp ) 

This makes the whole data frame load easily by a single load from "METRICS_DATA_FRAME_FILE_NAME", but each job- which may introduce a breaking schema change- can be loaded independently as well.