如何有效地从Xarray提取熊猫系列?

时间:2020-03-11 14:58:15

标签: python pandas python-xarray

这里的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是即时的。

0 个答案:

没有答案