仅对双时间维度DataArray重采样单维度时丢失另一维度
解决xarray多时间维度重采样丢失维度的问题
我懂你遇到的这个困扰——当你在带有两个时间相关维度(初始化时间T1是datetime类型,预报时效T2是timedelta类型)的DataArray上执行重采样时,非操作的维度居然直接丢失了,这确实挺闹心的。其实这大多是操作细节没注意到,咱们来一步步解决它。
先复现你的场景
首先我先还原你的测试代码,方便后续演示:
import xarray as xr import numpy as np import pandas as pd # 创建两个时间维度 T1 = pd.date_range('2001-01-01','2001-01-28', freq='12H') T2 = pd.timedelta_range(start='1 day', end='3 day', freq='3H') da_3H = xr.DataArray(np.random.randn(T1.size, T2.size), dims=('T1','T2'))
正确的重采样操作(保留另一个维度)
不管你是对T1还是T2重采样,只要用对方法,另一个维度都会被完整保留:
对初始化时间T1重采样(datetime维度)
如果你想把T1从12小时频率聚合到日尺度,直接用resample配合聚合函数即可,xarray会自动只对指定维度操作,保留其他维度:
# 把T1重采样到日尺度,计算均值 da_daily_T1 = da_3H.resample(T1='D').mean() # 查看结果维度:('T1', 'T2'),两个维度都在 print(da_daily_T1.dims)
如果担心默认聚合有问题,也可以显式指定要聚合的维度:
da_daily_T1 = da_3H.resample(T1='D').mean(dim='T1')
对预报时间T2重采样(timedelta维度)
对于timedelta类型的T2,xarray同样支持重采样操作,只需要传入对应的时间频率字符串:
# 把T2从3小时重采样到6小时,计算均值 da_6H_T2 = da_3H.resample(T2='6H').mean() # 查看结果维度:('T1', 'T2'),T1维度依然保留 print(da_6H_T2.dims)
如果还是出现维度丢失?检查这几点
- 升级xarray版本:较旧的xarray版本对多时间维度的支持可能不完善,建议升级到最新版:
pip install --upgrade xarray pandas - 避免全维度聚合:有些聚合函数(比如不带参数的
sum())会默认对所有维度聚合,但只要你用resample指定了目标维度,就只会对该维度进行聚合。 - 检查维度名拼写:如果重采样时写错了维度名,xarray可能会报错或者意外处理其他维度,确认你的维度名和DataArray中的完全一致。
扩展:同时对两个时间维度重采样
如果需要同时调整两个时间维度的频率,可以链式调用两次resample:
# 先把T1聚合成日尺度,再把T2聚合成6小时尺度 da_double_resample = da_3H.resample(T1='D').mean().resample(T2='6H').mean()
内容的提问来源于stack exchange,提问作者nicway
相关产品推荐
相关产品推荐

