我有一个由温度数据组成的nc文件。我想提取2001年至2018年5月30日至8月18日日期范围内的温度。时间变量的格式为let tempArry = Data.filter(
(item) => item.shipmentNumber.includes(props.dataToTable)
)
。我不在乎它是在2001-01-23
还是Python
中。我的数据总体如下:
cdo
我每年如何提取上述日期范围?
答案 0 :(得分:1)
通常,在这些情况下(一个简单的范围就不足),我发现最好的方法是查看是否可以构造一个长度与时间坐标为True
的布尔数组,如果值是我想在选择中包括的日期,如果没有,则为False
。然后,我可以将此布尔数组作为sel
中的索引器进行传递,以获得我想要的选择。
在此示例中,我将使用xarray中datetime accessor的dayofyear
,year
和is_leap_year
属性:
import pandas as pd
# Note dayofyear represents days since January first of the year,
# so it is offset by one after February 28/29th in leap years
# versus non-leap years.
may_30_leap = pd.Timestamp("2000-05-30").dayofyear
august_18_leap = pd.Timestamp("2000-08-18").dayofyear
range_leap = range(may_30_leap, august_18_leap + 1)
may_30_noleap = pd.Timestamp("2001-05-30").dayofyear
august_18_noleap = pd.Timestamp("2001-08-18").dayofyear
range_noleap = range(may_30_noleap, august_18_noleap + 1)
year_range = range(2001, 2019)
indexer = ((ds.days.dt.dayofyear.isin(range_leap) & ds.days.dt.is_leap_year) |
(ds.days.dt.dayofyear.isin(range_noleap) & ~ds.days.dt.is_leap_year))
indexer = indexer & ds.days.dt.year.isin(year_range)
result = ds.sel(time=indexer)
The年的逻辑有点笨拙,但我想不出更干净的方法。
答案 1 :(得分:1)
您必须添加变量days
作为与dataset.set_coords('days')
的坐标。然后,您可以使用sel
来检索数据片段
dataset.sel(time=slice("2001-01-23", "2018-01-01"))