我有一个长达一年的数据集(netCDF),其中时间,纬度和经度为坐标,而KBDI-AWAP作为变量,每天都会进行采样。
数据已使用Python加载到xarray的数据集,并按以下方式打印:
print(mds_kbdi)
输出:
<xarray.Dataset>
Dimensions: (latitude: 106, longitude: 193, time: 365)
Coordinates:
* latitude (latitude) float32 -39.2 -39.149525 ... -33.950478 -33.9
* longitude (longitude) float32 140.8 140.84792 140.89584 ... 149.95209 150.0
* time (time) datetime64[ns] 2017-01-01 2017-01-02 ... 2017-12-31
Data variables:
KBDI-AWAP (time, latitude, longitude) float32 dask.array<shape=(365, 106, 193), chunksize=(31, 106, 193)>
Attributes:
creationTime: 1525760660
creationTimeString: Mon May 7 23:24:20 PDT 2018
Conventions: COARDS
详细介绍(针对每个纬度和经度):
Date KBDI-AWAP
2017-01-01 10.5
2017-01-02 9.2
2017-01-03 9.8
... ...
2017-12-31 8.2
我想将KBDI-AWAP值重新采样为一个小时的间隔。因此,重新采样的数据集的维度为(纬度:106,经度:193,时间:8760)。同一日期内一个小时内的每个KBDI-AWAP值应与原始数据集中的日期值具有相同的值。
重新采样的数据将是(对于每个纬度和经度):
Date KBDI-AWAP
2017-01-01T00:00:00 10.5
2017-01-01T01:00:00 10.5
2017-01-01T02:00:00 10.5
...
2017-01-02T00:00:00 9.2
2017-01-02T01:00:00 9.2
2017-01-02T02:00:00 9.2
...
2017-01-03T00:00:00 9.8
2017-01-03T01:00:00 9.8
2017-01-03T02:00:00 9.8
... ...
... ...
2017-12-31T21:00:00 8.2
2017-12-31T22:00:00 8.2
2017-12-31T23:00:00 8.2
考虑到我应该在数据集上使用resample
函数,因此尝试使用mds_kbdi_hourly = mds_kbdi.resample(time='H')
,但这只会输出一个DatasetResample对象,而不是一个新的数据集。
我尝试了DatasetResample对象的pad()和ffill()。重新采样的数据似乎都丢失了其中一些数据。生成的['time']坐标是
['2017-01-01T00:00:00.000000000'
'2017-01-01T01:00:00.000000000'
'2017-01-01T02:00:00.000000000' ...
'2017-12-30T22:00:00.000000000'
'2017-12-30T23:00:00.000000000'
'2017-12-31T00:00:00.000000000'].
它缺少从2017-12-31T01:00:00.000000000
到2017-12-31T23:00:00.000000000
的时间戳。如何解决这个问题?
答案 0 :(得分:0)
您正在寻找pad
或ffill
方法。例如:
mds_kbdi.resample(time='1H').pad()
resample
方法始终返回一个Resample对象。仅当您应用对象的一种方法(例如pad)时,重采样对象才有用。
Xarray的文档在此处列出了可用的重采样方法:http://xarray.pydata.org/en/stable/api.html#resample-objects
并提供了一些有关如何使用它们的示例:http://xarray.pydata.org/en/stable/time-series.html#resampling-and-grouped-operations