我有一个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()
答案 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.dataset
为isel()
编制索引:
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 ...