xarray合并时间坐标重叠或缺失的多个DataArray对象方法咨询
问题原因
你之前用xr.merge出错是因为该方法设计初衷是合并包含不同变量的数据集,若输入的多个DataArray变量名相同,merge只会保留第一个输入对象的变量坐标范围,不会自动合并同一变量沿time维度的数值,因此da1独有的早于2017-10-04T13:00的时间点全部为空值。
解决方案
方案1:combine_first(适合少量数组、优先级明确的场景)
该方法会自动对齐所有坐标,优先保留调用对象的非空值,参数对象的数值仅用来填充调用对象缺失的坐标位置,完全符合你的需求:
# da2优先级更高,作为调用对象,用da1填充其缺失的早间时段 da_merged = da2.combine_first(da1)
方案2:concat + 去重(适合多数组批量处理场景)
如果需要合并的数组数量较多,可以先将数组按优先级从低到高排序,拼接后删除重复时间坐标、保留最后出现的(即优先级最高的)数值即可:
# 优先级:da1 < da2,所以优先级低的放列表前面 da_list = [da1, da2] # 沿time维度拼接 da_concat = xr.concat(da_list, dim='time') # 去重,保留最后出现的时间点对应的值 da_merged = da_concat.drop_duplicates(dim='time', keep='last')
两种方案最终得到的结果都会满足:
- 时间范围覆盖2017-10-03T18:00到2017-10-05T14:00
- 重叠时间点优先保留da2的数值
- 所有数组都缺失的时间点自动填充
nan
内容的提问来源于stack exchange,提问作者alextc
相关产品推荐
相关产品推荐

