这里的Xarray新手问题。
我正在寻找一种从Xarray提取时间序列的高效(快速和低内存)方式。
我有一个包含一年气候信息的数据集,我将从中提取一个属性('t2m')到Xarray中。然后,我在特定位置(经度和纬度)进行插值并将其写入数据框:
ds = xr.open_mfdataset(f_name)
da_all = ds.t2m
d_locs = {'longitude':float(lon), 'latitude':float(lat)}
da_city = da_all.interp(coords=d_locs, method='linear')
df = da_city.to_dataframe()
da_city的结构为:
<xarray.DataArray 't2m' (time: 365)>
dask.array<shape=(365,), dtype=float32, chunksize=(365,)>
Coordinates:
* time (time) datetime64[ns] 1979-01-01T11:30:00 ... 1979-12-31T11:30:00
day_of_month (time) int64 dask.array<shape=(365,), chunksize=(365,)>
month (time) int64 dask.array<shape=(365,), chunksize=(365,)>
year (time) int64 dask.array<shape=(365,), chunksize=(365,)>
longitude float64 24.5
latitude float64 10.5
Attributes:
long_name: 2 metre temperature
units: K
cell_methods: day_of_month: month: year: mean
这可行,但是要花365分钟才能返回一个365长,6宽的数据帧。
我怀疑原因是to_dataframe()方法正在创建一个巨大的,多级索引的数据帧,我将立即对其进行切片!
在调用to_dataframe()方法之前,是否有一种简单的方法可以对da进行切片?我在想类似的东西:
df = da_city['t2m'].to_dataframe()
但这失败了,因为da没有元素't2m'。
有人知道此处使用正确的语法吗?我敢肯定有一种简单而明显的方法可以做到这一点,但我找不到。谢谢。
更新:
分别提取时间值和数据然后制作熊猫系列也可以:
da_time = da_city['time'].values
da_vals = da_city.values
ts = pd.Series(data=da_vals, index=da_time, name='t2m')
但是获取da_city.values仍然很慢。 da_city ['time']。values是即时的。