如何在xarray数据集中筛选出每日12:00的时间数据?
问题描述

- 所用ERA5数据集为netCDF格式,时间格式为
%Y-%m-%dT%h:%M%s %p,按小时提供数据(31天共744个时间点) - 需求:提取每日12:00:00的数据,最终得到31个数据点,后续需复用该逻辑处理更长周期数据集
- 已尝试方法:
df = df[df['time'].dt.hour == 12]- 使用
ison函数
- 遇到错误:
TypeError: unhashable type: 'DataArray'
解决方案
方法1:xarray原生处理(推荐,适配netCDF数据)
若你的数据对象是xarray的Dataset/DataArray,直接用xarray的时间筛选方法:
# 筛选小时为12的数据 ds = ds.sel(time=ds.time.dt.hour == 12)
如需精准匹配时分秒:
# 筛选时间为12:00:00的记录 ds = ds.sel(time=ds.time.dt.strftime("%H:%M:%S") == "12:00:00")
方法2:转为pandas DataFrame处理
若习惯使用pandas,可先将xarray对象转成DataFrame再操作:
# 转换为DataFrame df = ds.to_dataframe() # 通过索引提取12点数据 df = df[df.index.get_level_values('time').hour == 12] # 或重置索引后筛选 df = df.reset_index() df = df[df['time'].dt.hour == 12]
错误原因
你遇到的TypeError是因为操作对象是xarray的DataArray,而非pandas的DataFrame。xarray不支持直接用[]加布尔数组的索引方式,需用sel或where方法实现筛选。
内容的提问来源于stack exchange,提问作者Matthew Graber
相关产品推荐
相关产品推荐

