在python中使用xarray获取每月气候学

问题描述:

我有一个netCDF文件,其中包含一个名为var 2001-01-01到2010-12-31的变量的日常数据。我想计算var的月度总额,导致包含12个时间步(每年一个月)的netCDF。目前,我这样做:在python中使用xarray获取每月气候学

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

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

然而,这导致的netCDF每月数额从2001年各月至2010年我如何获得12个月的月平均?

评论:我要找每月平均为12个月(2001年至2010年,所有年)。您的解决方案只计算月平均为1年

2001-01第一输出开始长达2010-12,因此,所有的年coverd。
你想要resample这些值吗?


我如何获得12个月的月平均?

你必须决定你想要的东西:在一年之内
平均每个月,结果在每年12个值,高达120个价值在10年

平均为1年,结果在10个值在10年

使用以下xarray.Dataset,DATE_RANGE = 10年

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 ... 

获取monthly_avr为每个月在date_range('2001-01-01', '2010-12-31', name='time')

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

输出:

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 ... 

获取year_avr每年在date_range('2001-01-01', '2010-12-31', name='time')

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

输出:

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 ... 

测试与Python 3.4.2 - xarray:0.9。1

+0

谢谢@stovfl,我正在寻找12个月的月平均值(从2001年到2010年的所有年份)。您的解决方案仅计算1年的月平均值 – user308827

要么

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

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

应该做的伎俩,这取决于你想要什么。