使用 xarray 将单个每月 NetCDF 文件拆分为每日平均 NetCDF 多个文件
Split single monthly NetCDF file into daily averaged NetCDF multiple files using xarray
我有 1 个 2007 年 9 月的 NetCDF 文件。它包含某些 lat/long 风和湿度变量的 6 小时数据。每个变量的形状是(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 = monthly_data.resample(time='1D').mean()
阅读文档后,您可以使用 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')
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)
为了以防对任何人有帮助,也可以直接从命令行执行计算日均值并划分为单独的日文件的任务:
cdo splitday -daymean in.nc day
生成一系列文件 day01.nc day02.nc ...
我有 1 个 2007 年 9 月的 NetCDF 文件。它包含某些 lat/long 风和湿度变量的 6 小时数据。每个变量的形状是(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 = monthly_data.resample(time='1D').mean()
阅读文档后,您可以使用 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')
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)
为了以防对任何人有帮助,也可以直接从命令行执行计算日均值并划分为单独的日文件的任务:
cdo splitday -daymean in.nc day
生成一系列文件 day01.nc day02.nc ...