【问题标题】:Getting monthly climatology using xarray in python在 python 中使用 xarray 获取每月气候学
【发布时间】:2017-07-31 07:03:02
【问题描述】:

我有一个 netCDF 文件,其中包含一个名为 var2001-01-01 到 2010-12-31 的变量的每日数据。我想计算 var 的每月总和,从而得到一个包含 12 个时间步长的 netCDF(一年中的每个月一个)。目前,我正在这样做:

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

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

但是,这会产生一个 netCDF,其中包含从 2001 年到 2010 年每个月的月度总和。我如何获得 12 个月的月平均值?

【问题讨论】:

    标签: python xarray


    【解决方案1】:

    评论:我正在寻找 12 个月的月平均值(从 2001 年到 2010 年的所有年份)。您的解决方案仅计算 1 年的月平均值

    我的第一次输出从 2001-012010-12,所以涵盖了所有年份。
    你想再次resample这些 120 值吗?


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

    你必须决定你想要什么:
    一年内每个月的平均值,每年产生 12 个值,10 年内最多产生 120 个值

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

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

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

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

    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

    【讨论】:

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

    要么

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-01-25
      • 2019-07-16
      • 1970-01-01
      • 2019-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多