XArray:从属性创建新的坐标/维度
XArray: Create a new coordinate / dimension from an attribute
我正在使用一个库 (georinex) 读取 GPS RINEX 数据和 returns 一个 xarray
in return.
我在 return 中从一个 GPS 接收站解析 rinex 文件得到的典型数据是例如这个:
<xarray.Dataset>Users\eballes\Desktop\share6_day5_highrate[=10=]\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
如您所见,坐标 为time
和sv
。但是,对于我的特定问题,我需要将数据变量 TransTime
添加为 坐标 。
不幸的是,我无法使任何工作正常进行,而且我还没有找到任何可用于修改现有 xarray
结构的示例,因为我认为最正常的方法是直接使用正确的坐标。
到目前为止的代码很简单,在 uncompress
之后使用 this data it:
import georinex as gr
nav = gr.load('abpo225a00.14n')
在这一点上我应该将nav
转换成类似于:
的东西
<xarray.Dataset>Users\eballes\Desktop\share6_day5_highrate[=12=]\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 开始遇到这个问题但不完全清楚自己想要什么的人有用。
我正在使用一个库 (georinex) 读取 GPS RINEX 数据和 returns 一个 xarray
in return.
我在 return 中从一个 GPS 接收站解析 rinex 文件得到的典型数据是例如这个:
<xarray.Dataset>Users\eballes\Desktop\share6_day5_highrate[=10=]\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
如您所见,坐标 为time
和sv
。但是,对于我的特定问题,我需要将数据变量 TransTime
添加为 坐标 。
不幸的是,我无法使任何工作正常进行,而且我还没有找到任何可用于修改现有 xarray
结构的示例,因为我认为最正常的方法是直接使用正确的坐标。
到目前为止的代码很简单,在 uncompress
之后使用 this data it:
import georinex as gr
nav = gr.load('abpo225a00.14n')
在这一点上我应该将nav
转换成类似于:
<xarray.Dataset>Users\eballes\Desktop\share6_day5_highrate[=12=]\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 开始遇到这个问题但不完全清楚自己想要什么的人有用。