2017-03-10 1 views
3

J'ai un fichier netCDF contenant des données quotidiennes pour une variable appelée var 2001-01-01 à 2010-12-31. Je veux calculer la somme mensuelle pour var résultant en un netCDF contenant 12 pas de temps (un pour chaque mois de l'année). À l'heure actuelle, je fais ceci:Obtention de la climatologie mensuelle à l'aide de xarray en python

import xarray as xr 
hndl_fl = xr.open_dataset(path_file) 

hndl_fl.resample('1MS', dim='time', how='sum') 

Cependant, il en résulte une netCDF des sommes mensuelles pour chaque mois de 2001 à 2010. Comment puis-je obtenir la moyenne mensuelle pendant 12 mois?

Répondre

3

Commentaires: Je cherche moyenne mensuelle pendant 12 mois (pour toutes les années de 2001 à 2010). calcule que la moyenne mensuelle de votre solution pour 1 an

Mon premier début de sortie de 2001-01 jusqu'à 2010-12, donc toutes les années sont coverd.
Voulez-vous resample ces une fois de plus?


Comment puis-je obtenir la moyenne mensuelle pendant 12 mois?

Vous devez décider ce que vous voulez:
moyenne pour chaque mois dans l'année, les résultats dans 12 valeurs par année, jusqu'à 120 valeurs dans 10 ans
ou
moyenne pour 1 an, résultats dans 10 valeurs en 10 ans

utilisant ce qui suit xarray.Dataset, date_range = 10 ans

date_range('2001-01-01', '2010-12-31', name='time') 
<xarray.Dataset> 
Dimensions: (time: 3652) 
Coordinates: 
    * time  (time) datetime64[ns] 2001-01-01 2001-01-02 2001-01-03 ... 
Data variables: 
    data  (time) float64 16.0 18.0 15.0 12.0 23.0 9.0 7.0 18.0 23.0 23.0 ... 

Obtenez le monthly_avr pour chaque mois dans le date_range('2001-01-01', '2010-12-31', name='time'):

monthly_avr = ds.resample('1MS', dim='time', how='mean') 

Sortie:

monthly_avr=<xarray.Dataset> 
Dimensions: (time: 120) 
Coordinates: 
    * time  (time) datetime64[ns] 2001-01-01 2001-02-01 2001-03-01 ... 
Data variables: 
    data  (time) float64 17.42 16.54 19.23 18.37 14.74 17.8 16.45 17.29 ... 

Obtenez le year_avr pour chaque année dans la date_range('2001-01-01', '2010-12-31', name='time'):

year_avr = ds.resample('1AS', dim='time', how='mean') 

sortie:

year_avr=<xarray.Dataset> 
Dimensions: (time: 10) 
Coordinates: 
    * time  (time) datetime64[ns] 2001-01-01 2002-01-01 2003-01-01 ... 
Data variables: 
    data  (time) float64 17.22 17.13 17.05 17.49 17.38 17.07 16.72 16.47 ... 

testé avec Python: 3.4.2 - xarray: 0,9.1

+0

merci @stovfl, je recherche une moyenne mensuelle pour 12 mois (pour toutes les années de 2001 à 2010). Votre solution ne calcule que la moyenne mensuelle pour 1 an – user308827

1

Soit

hndl_fl.resample('1MS', dim='time', how='mean') 

ou

hndl_fl.groupby('time.month').mean('time') 

devrait faire l'affaire, en fonction de ce que vous voulez exactement.