对不包含时间维度的文件使用 xarray open_mfdataset
Use xarray open_mfdataset on files with no time dimension included
我有一个 NetCDF 文件列表,我想用 xarray.open_mfdataset
函数打开这些文件。
这通常是微不足道的,但是我 运行 遇到了一个问题,因为我尝试打开的文件中没有任何“时间”维度:
data
Out[51]:
<xarray.Dataset>
Dimensions: (lat: 850, lon: 1500)
Coordinates:
* lat (lat) float64 54.98 54.94 54.9 54.86 ... 21.14 21.1 21.06 21.02
* lon (lon) float64 -126.0 -125.9 -125.9 -125.9 ... -66.1 -66.06 -66.02
Data variables:
Data (lat, lon) float32 ...
当我尝试用 open_mfdataset 打开我的文件列表时,我当然会得到一个错误:
xr.open_mfdataset(files)
ValueError: Could not find any dimension coordinates to use to order the datasets for concatenation
但是我确实有每个文件对应的日期列表:
dates
Out[54]:
array([datetime.datetime(2009, 1, 1, 0, 0),
datetime.datetime(2009, 1, 2, 0, 0),
datetime.datetime(2009, 1, 3, 0, 0), ...,
datetime.datetime(2019, 12, 29, 0, 0),
datetime.datetime(2019, 12, 30, 0, 0),
datetime.datetime(2019, 12, 31, 0, 0)], dtype=object)
我假设有一些方法可以为每个文件添加一个时间维度,并使用 open_mfdataset
打开它们,可能使用“预处理”参数。
感谢您的帮助。
这是我的解决方案:
创建一个向 DataArray 添加时间维度的函数,并用任意日期填充它:
def add_time_dim(xda):
xda = xda.expand_dims(time = [datetime.now()])
return xda
然后,当 运行 open_mfdataset
函数时,将此函数传递给 preprocess
参数:
data = xr.open_mfdataset(files, preprocess = add_time_dim)
最后,用我的日期填充 time
维度:
data['time'] = dates
我有一个 NetCDF 文件列表,我想用 xarray.open_mfdataset
函数打开这些文件。
这通常是微不足道的,但是我 运行 遇到了一个问题,因为我尝试打开的文件中没有任何“时间”维度:
data
Out[51]:
<xarray.Dataset>
Dimensions: (lat: 850, lon: 1500)
Coordinates:
* lat (lat) float64 54.98 54.94 54.9 54.86 ... 21.14 21.1 21.06 21.02
* lon (lon) float64 -126.0 -125.9 -125.9 -125.9 ... -66.1 -66.06 -66.02
Data variables:
Data (lat, lon) float32 ...
当我尝试用 open_mfdataset 打开我的文件列表时,我当然会得到一个错误:
xr.open_mfdataset(files)
ValueError: Could not find any dimension coordinates to use to order the datasets for concatenation
但是我确实有每个文件对应的日期列表:
dates
Out[54]:
array([datetime.datetime(2009, 1, 1, 0, 0),
datetime.datetime(2009, 1, 2, 0, 0),
datetime.datetime(2009, 1, 3, 0, 0), ...,
datetime.datetime(2019, 12, 29, 0, 0),
datetime.datetime(2019, 12, 30, 0, 0),
datetime.datetime(2019, 12, 31, 0, 0)], dtype=object)
我假设有一些方法可以为每个文件添加一个时间维度,并使用 open_mfdataset
打开它们,可能使用“预处理”参数。
感谢您的帮助。
这是我的解决方案:
创建一个向 DataArray 添加时间维度的函数,并用任意日期填充它:
def add_time_dim(xda):
xda = xda.expand_dims(time = [datetime.now()])
return xda
然后,当 运行 open_mfdataset
函数时,将此函数传递给 preprocess
参数:
data = xr.open_mfdataset(files, preprocess = add_time_dim)
最后,用我的日期填充 time
维度:
data['time'] = dates