向xarray中的变量添加维度/坐标



我正在将Excel文件转换为xarray,并且在为变量分配维度时遇到问题。

当从Pandas数据帧转换为xarray时,我会得到如下结果:

<xarray.Dataset>
Dimensions:  (index: 10160)
Coordinates:
* index    (index) int64 0123... 10156 10157 10158 10159
Data variables:
DATE      (index) datetime64[ns] 2003-08-21 2003-08-21 ... 2021-08-14
TIME      (index) object  2315 2315 316 ... 1816 1949 1949
LATITUDE  (index) float64 64.07 64.07 64.07 ... 65.64 65.64
LONGITUDE (index) float64 -164.6-164.6 .... -168.3 -168.3
salinity  (index) float64 float64 nan nan nan ... 31.83 30.48 30.49
temp      (index) float64 nan nan nan ... 2.474 9.171 9.092

要将一些数据变量更改为坐标,我使用以下代码:

ds
.assign_coords({"index": ds.TIME.values})
.assign_coords({"date": ds.DATE.values})
.assign_coords({"longitude": ds.LONGITUDE.values})
.assign_coords({"latitude": ds.LATITUDE.values})
.drop("TIME")
.drop("DATE")
.drop("LONGITUDE")
.drop("LATITUDE")
.rename_dims({"index":"time"})      
.rename({"index":"time"})           
)

这解决了一些问题,通过添加时间、日期、纬度和经度作为维度和坐标,并将任意索引更改为时间:

<xarray.Dataset>
Dimensions:  (time: 10160, date: 10160, longitude: 10160, latitude: 10160)
Coordinates:
time    (time) object 2315 2315 316 ... 1816 1949 1949
date    (date) datetime64[ns] 2003-08-21 2003-08-21 ... 2021-08-14
longitude (longitude) float64 -164.6-164.6 .... -168.3 -168.3
latitude (latitude) float64 64.07 64.07 64.07 ... 65.64 65.64
Data variables:
salinity  (time) float64 float64 nan nan nan ... 31.83 30.48 30.49
temp      (time) float64 nan nan nan ... 2.474 9.171 9.092

我试图解决这个问题的一种方法是形成一个具有4个维度的多索引,变量应该与之关联:

midx = pd.MultiIndex.from_arrays([ds.LATITUDE.values, ds.LONGITUDE.values, ds.TIME.values, ds.DATE.values], names = ['latitude','longitude','time','date'])
ds['midx'] = midx
ds
.assign_coords({"index": ds.midx.values})
.assign_coords({"time": ds.TIME.values})
.assign_coords({"date": bns_xr.DATE.values})
.assign_coords({"longitude": bns_xr.LONGITUDE.values})
.assign_coords({"latitude": bns_xr.LATITUDE.values})
.drop("TIME")
.drop("DATE")
.drop("LONGITUDE")
.drop("LATITUDE")  
.drop("midx")
.rename_dims({"index":"midx"})      
.rename({"index":"midx"})   

然而,这导致变量的维度为midx,而不是具有所需的4个维度。我如何将维度与变量联系起来,例如:盐度(纬度、经度、时间、日期(?

一旦将多索引指定为维度,就可以使用xr.Dataset.unstack:将其拆下

unstacked = ds.unstack("midx")

然而,我希望日期和时间并不相互垂直,而只是关于日期时间维度的信息,该维度应该存在于数组中。如果你的数据应该只有3D,那么确保只包括在多索引中索引数据的三个dim。

或者,这一切都可以通过在转换为xarray:之前将正确的索引设置为pandas数据帧上的多索引来实现

df.set_index(["time", "latitude", "longitude"]).to_xarray()

相关内容

  • 没有找到相关文章

最新更新