J'ai un fichier qui est des données mensuelles pour un an (12 points). Les données commencent en décembre et se terminent en novembre. Je souhaite créer un fichier de moyenne mobile de 3 mois qui serait DJF, JFM, ..., SON (10 points)python-xarray: exemple de laminage
J'ai remarqué qu'il y a une fonction DataArray.rolling
qui retourne une option de fenêtre mobile et je pense que sois utile pour ça. Cependant, je n'ai trouvé aucun exemple utilisant la fonction de roulement. J'avoue que je ne suis pas familier avec bottleneck, pandas.rolling_mean
ou le plus récent pandas.rolling
donc mon niveau d'entrée est assez faible.
est ici un code à tester:
import numpy as np
import pandas as pd
import xarray as xr
lat = np.linspace(-90, 90, num=181); lon = np.linspace(0, 359, num=360)
# Define monthly average time as day in middle of month
time = pd.date_range('15/12/1999', periods=12, freq=pd.DateOffset(months=1))
# Create data as 0:11 at each grid point
a = np.linspace(0,11,num=12)
# expand to 2D
a2d = np.repeat(tmp[:, np.newaxis], len(lat), axis=1)
# expand to 3D
a3d = np.repeat(a2d[:, :, np.newaxis], len(lon), axis=2)
# I'm sure there was a cleaner way to do that...
da = xr.DataArray(a3d, coords=[time, lat, lon], dims=['time','lat','lon'])
# Having a stab at the 3-month rolling mean
da.rolling(dim='time',window=3).mean()
# Error output:
Traceback (most recent call last):
File "<ipython-input-132-9d64cc09c263>", line 1, in <module>
da.rolling(dim='time',window=3).mean()
File "/Users/Ray/anaconda/lib/python3.6/site-packages/xarray/core/common.py", line 478, in rolling
center=center, **windows)
File "/Users/Ray/anaconda/lib/python3.6/site-packages/xarray/core/rolling.py", line 126, in __init__
center=center, **windows)
File "/Users/Ray/anaconda/lib/python3.6/site-packages/xarray/core/rolling.py", line 62, in __init__
raise ValueError('exactly one dim/window should be provided')
ValueError: exactement une faible/fenêtre doit être fournie
Merci. La façon la plus simple de laisser tomber les nans était simplement da.rolling (time = winlen) .mean() [winlen-1 ::,:,:] je ne sais pas s'il y avait quelque chose de mieux. Attention si je fais un petit PR pour ajouter cet exemple au DOC de https://github.com/pydata/xarray/blob/master/xarray/core/rolling.py Y at-il une liste des fonctions disponibles à l'objet roulant moyenne, somme, médiane, etc. –
Il y a donc deux choses que vous pouvez faire pour aider les nans: 1) vous pouvez définir 'min_periods' à un entier (par exemple' da.rolling (min_periods = 0, time = 3) .mean() '), ou 2) vous pouvez supprimer les NaN en utilisant 'dropna' (par exemple, da.rolling (time = 3) .mean(). Dropna ('time)'). Nous sommes toujours ouverts aux gens aident à améliorer la documentation de xarray. – jhamman