从python中的每日netcdf文件计算月平均值

时间:2017-08-21 11:39:10

标签: python numpy netcdf

您好我有一个包含每日数据的netcdf文件。文件的形状是(5844,89,89),即16年的数据。我试图从每日数据中获得月平均值。我正在寻找pandas数据帧中的resample函数的simillar。反正有没有在python中这样做。 据我所知,使用cdo和nco很容易计算,但我正在寻找python。

我用来读取netcdf文件的示例代码是:

import netCDF4
from netCDF4 import Dataset
fh = Dataset(ncfile, mode='r')
time = fh.variables['time'][:]
lon = fh.variables['longitude'][:]
lat = fh.variables['latitude'][:]
data = fh.variables['t2m'][:]
data.shape

4 个答案:

答案 0 :(得分:3)

@ jhamman感谢您推荐xarray.resample。这比我想象的要简单,我的问题的答案是:

import xarray as xr
ds = xr.open_dataset(nc_file)
monthly_data = ds.resample(freq = 'm', dim = 'time', how = 'mean')

答案 1 :(得分:2)

通过新版本的xarray,用法更加简单

monthly_data=ds.resample(time='m').mean()

答案 2 :(得分:1)

如果您使用的是Linux或macOS,则可以使用nctoolkit(使用CDO作为后端)轻松完成。 (安装说明here)。

如果要获取月度平均值,则只需要以下内容:

import nctoolkit as nc
data = nc.open_data(ncfile)
data.monthly_mean()

可以绘制:

data.plot()

如果要将其转换为熊猫数据框:

df = data.to_dataframe()

答案 3 :(得分:0)

我还可以建议以下解决方法:

data = fh.variables['t2m'][:] # The t2m variable is pulled out of the file as 'data'
stat1 = data.mean() # mean
stat2 = data.std() # standard dev