pandas 根据月份选择xarray数据集

mwngjboj  于 2023-11-15  发布在  其他
关注(0)|答案(3)|浏览(129)

我有一个xarray数据集,包含以下信息:

Coordinates:
lat: float64 (192)
lon: float64 (288)
time: object (1200) (monthly data)

Data Variables:
tas: (time, lat, lon)

字符串
现在我想要特定月份的tas值,例如我想要包含1月份所有记录的新数据集。
输出数据集将如下所示:

Coordinates:
lat: float64 (192)
lon: float64 (288)
time: object (100) (monthly data of January)

Data Variables:
tas: (time, lat, lon)


我尝试了一种我以前用过的方法:

jan = pd.date_range(start='1979-01-01', periods=41, freq='AS-JAN').date.tolist()
gs_jan = gs.sel(time = jan)


但这不会在我的情况下工作,因为我的日期是在0001-0100年,Pandas不支持在这个范围内的日期!

7gcisfzg

7gcisfzg1#

一般来说,要分析这样的时间序列数据,您需要使用xarray的da.groupby()方法(http://xarray.pydata.org/en/stable/groupby.html)遵循group-split-apply方法。
在你的情况下,我建议尝试:

# Use .groupby('time.month') to organize the data into months
# then use .groups to extract the indices for each month
month_idxs=gs.groupby('time.month').groups

# Extract the time indices corresponding to all the Januarys 
jan_idxs=month_idxs[1]

# Extract the january months by selecting 
# the relevant indices
gs_jan=gs.isel(time=jan_idxs)

字符串
希望这对你有帮助!

gopyfrb3

gopyfrb32#

另一种用更少的代码完成此任务的方法是使用
xarray.where()

Jan = data.where(((data['time.year'] == 2020) & (data['time.month'] == 1)), drop=True)

字符串

a8jjtwal

a8jjtwal3#

虽然the answer by Andrew已经解决了这个问题,但是如果您只希望提取一个特定的月份,

gs.groupby('time.month')[1]

字符串
这里,1表示January。它更像是一个字典,所以只需使用键(实际上是groupby对象中的标签)就可以检索到特定的月份,而不需要首先检索索引。

相关问题