我正在使用xarray处理相当长的数据集。它非常有趣,我能够在online documentation中找到所需的一切。但是,现在我尝试绘制夏季和冬季的数据,但无法正常工作。虽然我找到了许多有关计算均值的文档,但对于“纯”数据却一无所获。所以我的代码是:
冬季:
da.loc[(dataD['time.month']>10 & dataD['time.month']<3)]
在夏天中:
da.loc[(dataD['time.month']>4 & dataD['time.month']<9)]
应该提供11月至2月和5月至8月的所有数据。但是我总是遇到以下错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我也尝试切片,例如
dataH.sel(time=slice('1995-06-01', '2005-06-10'))
但是我找不到跳过冬季或夏季之间的方法。
顺便说一句:我想避免循环访问数据(90k个元素!)。我真的很喜欢xarray(dask?!?)处理数据的方法,所以我很乐意保留代码简洁大方:)
我将不胜感激。谢谢!
答案 0 :(得分:1)
您非常接近:使用逐元素比较和二进制运算时,您只需要多括号即可。
da.loc[(dataD['time.month']>10) | (dataD['time.month']<3)] # winter
da.loc[(dataD['time.month']>4) & (dataD['time.month']<9)] # summer
(与Python中的&
之类的比较相比,诸如>
之类的二进制运算符绑定更紧密)。
另一个可能更具可读性的选项是使用isin()
方法(需要xarray v0.10.3或更高版本):
ds.loc[dataD['time.month'].isin([1, 2, 11, 12])] # winter
ds.loc[dataD['time.month'].isin([5, 6, 7, 8])] # summer