2017-09-01 3 views
0

Ich habe eine Datei, die monatliche Daten für ein Jahr ist (12 Punkte). Die Daten beginnen im Dezember und enden im November. Ich hoffe, eine 3-Monats-Laufmittel Datei zu erstellen, die wäre DJF, JFM, ..., SON (10 Punkte)python-xarray: rollendes Mittelbeispiel

Ich bemerkte, dass es eine DataArray.rolling Funktion gibt, die eine rollende Fensteroption zurückgibt und ich denke, würde dafür nützlich sein. Ich habe jedoch keine Beispiele gefunden, die die Rollfunktion verwenden. Ich gebe zu, ich bin nicht vertraut mit bottleneck, pandas.rolling_mean oder der jüngeren pandas.rolling, so dass mein Einstiegsniveau ziemlich niedrig ist.

Hier einige Code zu testen:

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: genau ein dim/Fenster sollte

Antwort

0

Sie sind ganz in der Nähe zur Verfügung gestellt werden. Die rolling method nimmt ein Schlüssel/Wert-Paar, das als dim/window_size abbildet. Dies sollte für Sie arbeiten.

da.rolling(time=3).mean() 
+0

Danke. Die einfachste Art, wie ich die Nans fallen ließ, war einfach da.rolling (time = winlen) .mean() [winlen-1 ::,:,:] nicht sicher, ob es etwas besseres gab. Denken Sie daran, wenn ich ein kleines PR mache, um dieses Beispiel dem DOC von https://github.com/pydata/xarray/blob/master/xarray/core/rolling.py hinzuzufügen Gibt es eine Liste der verfügbaren Funktionen zum rollenden Objekt z Mittelwert, Summe, Median usw.? –

+1

Also gibt es zwei Dinge, die Sie tun können, die mit den nans helfen würden: 1) Sie können 'min_periods' auf eine Ganzzahl setzen (zB' da.rolling (min_periods = 0, time = 3) .mean() '), oder 2) Sie können die NaNs mit 'dropna' löschen (zB da.rolling (time = 3) .mean(). Dropna ('time)'). Wir sind immer offen für Leute, die helfen, die Xarray-Dokumentation zu verbessern. – jhamman

Verwandte Themen