使用xarray将单个每月NetCDF文件拆分为每日平均NetCDF多个文件

时间:2019-01-26 08:26:25

标签: python python-xarray netcdf4

我有一个2007年9月的NetCDF文件。它包含某些经/纬度的小时数据,其中包含风和湿度变量。每个变量的形状为(120, 45, 93):120次(每天4次),45个纬度和93个经度。通过以下代码,我能够获取所有变量的每日平均数据。现在,每个变量的形状为(30, 45, 93)。时间是一个整数,单位为'hours since 1900-01-01 00:00:00.0'

从每天的平均数据来看,我如何每天分成30个不同的NetCDF文件,文件名包含YYYY:MM:DD时间格式?

import xarray as xr
monthly_data = xr.open_dataset('interim_2007-09-01to2007-09-31.nc') 
daily_data = ds.resample(time='1D').mean()

3 个答案:

答案 0 :(得分:2)

Xarray在这种情况下具有顶级功能-xarray.save_mfdataset。对于您的情况,您可能想使用groupby将数据集分成逻辑块,然后创建一个对应文件名的列表。从那里,让save_mfdataset完成其余的工作。

dates, datasets = zip(*ds.resample(time='1D').mean('time').groupby('time'))
filenames = [pd.to_datetime(date).strftime('%Y.%m.%d') + '.nc' for date in dates]
xr.save_mfdataset(datasets, filenames)

答案 1 :(得分:0)

浏览完文档后,您可以使用NetCDF4的num2date将整数转换为日期。 您也可以使用xarray.datasetisel()编制索引:

from netCDF4 import num2date
for i in range(30):
    day = daily_data.isel(time=i)
    the_date = num2date(day.time.data, units='hours since 1900-01-01 00:00:00')
    day.to_netcdf(str(the_date.date())+'.nc', format='NETCDF4')

答案 2 :(得分:0)

只要有帮助,也可以直接从命令行执行以下任务:计算每日平均值并直接将其分成单独的每日文件:

cdo splitday -daymean in.nc day

产生一系列文件day01.nc day02.nc ...