繁体   English   中英

XArray:从属性创建新的坐标/尺寸

[英]XArray: Create a new coordinate / dimension from an attribute

我正在使用一个读取GPS RINEX数据并返回xarray的库( georinex )。

我从一个GPS接收站解析rinex文件得到的典型数据例如是:

<xarray.Dataset>Users\eballes\Desktop\share\226_day\225_highrate\00\abpo225a00.14n
Dimensions:           (sv: 12, time: 2)
Coordinates:
  * time              (time) datetime64[ns] 2014-08-13 2014-08-13T02:00:00
  * sv                (sv) <U3 'G01' 'G03' 'G07' 'G08' ... 'G27' 'G28' 'G32'
Data variables:
    SVclockBias       (time, sv) float64 nan nan nan ... 0.0003767 -0.0003641
    SVclockDrift      (time, sv) float64 nan nan nan ... 2.728e-12 8.413e-12
    SVclockDriftRate  (time, sv) float64 nan nan nan nan nan ... 0.0 0.0 0.0 0.0
    IODE              (time, sv) float64 nan nan nan nan ... 89.0 60.0 85.0 64.0
    Crs               (time, sv) float64 nan nan nan nan ... -29.56 100.2 78.56
    DeltaN            (time, sv) float64 nan nan nan ... 3.904e-09 5.106e-09
    M0                (time, sv) float64 nan nan nan nan ... 0.6369 1.585 -1.493
    Cuc               (time, sv) float64 nan nan nan ... 4.929e-06 4.02e-06
    Eccentricity      (time, sv) float64 nan nan nan ... 0.01919 0.01139
    Cus               (time, sv) float64 nan nan nan ... 9.466e-06 8.697e-06
    sqrtA             (time, sv) float64 nan nan nan ... 5.154e+03 5.154e+03
    Toe               (time, sv) float64 nan nan nan ... 2.664e+05 2.664e+05
    Cic               (time, sv) float64 nan nan nan ... -7.078e-08 -1.863e-08
    Omega0            (time, sv) float64 nan nan nan nan ... 2.154 1.175 -1.948
    Cis               (time, sv) float64 nan nan nan ... -4.619e-07 -1.434e-07
    Io                (time, sv) float64 nan nan nan ... 0.9641 0.9871 0.9473
    Crc               (time, sv) float64 nan nan nan nan ... 338.2 208.2 206.5
    omega             (time, sv) float64 nan nan nan ... 0.3215 -1.71 -0.1162
    OmegaDot          (time, sv) float64 nan nan nan ... -7.925e-09 -8.374e-09
    IDOT              (time, sv) float64 nan nan nan ... 5.997e-10 6.879e-10
    CodesL2           (time, sv) float64 nan nan nan nan nan ... 0.0 0.0 0.0 0.0
    GPSWeek           (time, sv) float64 nan nan nan ... 1.805e+03 1.805e+03
    L2Pflag           (time, sv) float64 nan nan nan nan nan ... 0.0 0.0 0.0 0.0
    SVacc             (time, sv) float64 nan nan nan nan nan ... 2.0 2.0 2.0 2.0
    health            (time, sv) float64 nan nan nan nan nan ... 0.0 0.0 0.0 0.0
    TGD               (time, sv) float64 nan nan nan ... -1.071e-08 -3.26e-09
    IODC              (time, sv) float64 nan nan nan nan ... 89.0 60.0 85.0 64.0
    TransTime         (time, sv) float64 nan nan nan ... 2.592e+05 2.592e+05
    FitIntvl          (time, sv) float64 nan nan nan nan nan ... 4.0 4.0 4.0 4.0
Attributes:
    version:    2.1
    svtype:     ['G']
    rinextype:  nav
    filename:   abpo225a00.14n

如您所见, 坐标timesv 但是对于我的特定问题,我需要将数据变量TransTime添加为Coordinate

不幸的是,我什么都做不了,并且我还没有找到任何示例对修改现有xarray的结构有用,因为我认为最正常的方法是直接使用正确的坐标创建它。

至此为止的代码在uncompress后使用这些数据很简单:

  import georinex as gr
  nav = gr.load('abpo225a00.14n')

在这一点上,我应该 nav转换为类似于以下内容的内容:

<xarray.Dataset>Users\eballes\Desktop\share\226_day\225_highrate\00\abpo225a00.14n
Dimensions:           (sv: 12, time: 2)
Coordinates:
  * time              (time) datetime64[ns] 2014-08-13 2014-08-13T02:00:00
  * sv                (sv) <U3 'G01' 'G03' 'G07' 'G08' ... 'G27' 'G28' 'G32'
  * TransTime         (TransTime) <values from TransTime variable>

尝试

nav = nav.assign_coords(TransTime=nav.TransTime])

技术上,从我的质询接受的答案是正确的。 不幸的是,这还不足以解决我的问题,而我无法真正正确地制定公式。

当使用可接受的答案分配坐标时,所得Xarray具有以下形状:

Coordinates:
  * time              (time) datetime64[ns] 2014-08-13 2014-08-13T02:00:00
  * sv                (sv) <U3 'G01' 'G03' 'G07' 'G08' ... 'G27' 'G28' 'G32'
    TransTime         (sv, time) <values from TransTime variable>

这不是我真正想要的(或者至少对我没有用),因为新坐标取决于其他两个索引,并且自身没有索引。

我意识到我真正想要的不是新坐标,而是索引的变化。 最后,实现此目标的实际工作是转到DataFrame级别,删除当前索引,创建新索引,然后返回到xarray

nav = gr.load(file_path).to_dataframe().dropna(how='all')
nav = nav.reset_index(['time', 'sv'])
nav = nav.set_index(['sv','TransTime'])
nav = nav.to_xarray()

我希望这对于从XArray / Pandas开始但未完全知道他们想要什么的人很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM