Não sei se esse modo de pegar o range de datas é a melhor maneira. Achei duas outras alternativas.
# primeiro caso:
df_sem_total = df.drop('Total', axis=1)
anos = df_sem_total.select_dtypes(include='int64').columns.tolist()
# segundo caso: nesse caso como usa regex, ele pega apenas as colunas que são formadas por números:
anos = df.filter(regex='\d+').columns.tolist()
Não sei se estou otimizando com antecedência mas achei legal compartilhar.