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

2024-09-30 02:21:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一个库(georinex),它读取GPS-RINEX数据并返回xarray。你知道吗

从一个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作为坐标。你知道吗

不幸的是,我不能让任何东西工作,我还没有发现任何对修改已经存在的xarray的结构有用的例子,因为我假设最正常的方法是用正确的坐标直接创建它。你知道吗

到目前为止,在uncompress之后使用this data代码非常简单:

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

在这一点上,我应该把它转换成类似的东西:

<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>

Tags: 数据sharetimenanusersdatasetgpsxarray
2条回答

从技术上讲,我的问题的答案是正确的。不幸的是,这对我的问题来说还不够,因为我不能正确地表述。你知道吗

用接受的答案指定坐标时,生成的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起步的人来说是有用的,因为他们不知道自己想要什么。你知道吗

试试看

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

相关问题 更多 >

    热门问题