如何在xarray中获取变量点对应的time、lat、lon维度索引
xarray筛选超阈值降水并获取对应维度索引解决方案
- 方法1:转pandas DataFrame批量处理(更适合批量统计需求,代码更简洁)
# 将降水数据转为带坐标的DataFrame df = ds3.tp.to_dataframe().reset_index() # 筛选大于阈值的降水记录 outlier_df = df[df["tp"] > 0.08] # 追加获取对应原数据集的维度位置索引 outlier_df["time_index"] = ds3.time.get_indexer(outlier_df["time"]) outlier_df["lat_index"] = ds3.lat.get_indexer(outlier_df["lat"]) outlier_df["lon_index"] = ds3.lon.get_indexer(outlier_df["lon"]) # 输出查看结果 print(outlier_df)
你需要的所有维度坐标、降水值、对应位置索引都存在outlier_df中,可直接导出或后续处理。
- 方法2:遍历outliers逐行获取(适合需要单条逐个处理的场景)
outliers = ds3.where(ds3.tp > 0.08, drop=True) for x in outliers.tp: # 获取降水值 tp_val = x.item() # 获取对应维度的实际坐标值 time_val = x.time.item() lat_val = x.lat.item() lon_val = x.lon.item() # 获取对应原数据集的维度位置索引 time_idx = ds3.time.get_indexer([time_val])[0] lat_idx = ds3.lat.get_indexer([lat_val])[0] lon_idx = ds3.lon.get_indexer([lon_val])[0] # 按需打印或存储 print(f"降水值:{tp_val:.6f}, 时间索引:{time_idx}, 纬度索引:{lat_idx}, 经度索引:{lon_idx}")
补充说明:如果你只需要坐标的实际值(如
1981-03-01、8.25这类)不需要原数组的位置索引,可以省略get_indexer步骤,直接使用获取到的time_val、lat_val、lon_val即可。
内容的提问来源于stack exchange,提问作者Jessica
相关产品推荐
相关产品推荐

