我正在阅读[RINEX-3.02](第60页)观察数据文件,以进行一些基于时间的卫星ID过滤,最终将重建它。通过RTK后处理,这将使我能够更好地控制卫星的选择,以便随着时间的推移为位置解决方案做出贡献。
特别是对于这部分,我只是使用:
以下是带有前三个时间戳记观察的样本 注意:我没有必要解析标题中的数据。
3.02 OBSERVATION DATA M: Mixed RINEX VERSION / TYPE
CONVBIN 2.4.2 20130731 223656 UTC PGM / RUN BY / DATE
log: /home/ruffin/Documents/Data/in/FlagStaff_center/FlagStaCOMMENT
format: u-blox COMMENT
MARKER NAME
MARKER NUMBER
MARKER TYPE
OBSERVER / AGENCY
REC # / TYPE / VERS
ANT # / TYPE
808673.9171 -4086658.5368 4115497.9775 APPROX POSITION XYZ
0.0000 0.0000 0.0000 ANTENNA: DELTA H/E/N
G 4 C1C L1C D1C S1C SYS / # / OBS TYPES
R 4 C1C L1C D1C S1C SYS / # / OBS TYPES
S 4 C1C L1C D1C S1C SYS / # / OBS TYPES
2013 7 28 0 27 28.8000000 GPS TIME OF FIRST OBS
2013 7 28 0 43 43.4010000 GPS TIME OF LAST OBS
G SYS / PHASE SHIFT
R SYS / PHASE SHIFT
S SYS / PHASE SHIFT
0 GLONASS SLOT / FRQ #
C1C 0.000 C1P 0.000 C2C 0.000 C2P 0.000 GLONASS COD/PHS/BIS
END OF HEADER
> 2013 7 28 0 27 28.8000000 0 10
G10 20230413.601 76808.847 -1340.996 44.000
G 4 20838211.591 171263.904 -2966.336 41.000
G12 21468211.719 105537.443 -1832.417 43.000
S38 38213212.070 69599.2942 -1212.899 45.000
G 5 22123924.655 -106102.481 1822.942 46.000
G25 23134484.916 -38928.221 656.698 40.000
G17 23229864.981 232399.788 -4048.368 41.000
G13 23968536.158 6424.1143 -123.907 28.000
G23 24779333.279 103307.5703 -1805.165 29.000
S35 39723655.125 69125.5242 -1209.970 44.000
> 2013 7 28 0 27 29.0000000 0 10
G10 20230464.937 77077.031 -1341.254 44.000
G 2 20684692.905 35114.399 -598.536 44.000
G12 21468280.880 105903.885 -1832.592 43.000
S38 38213258.255 69841.8772 -1212.593 45.000
G 5 22123855.354 -106467.087 1823.084 46.000
G25 23134460.075 -39059.618 657.331 40.000
G17 23230018.654 233209.408 -4048.572 41.000
G13 23968535.044 6449.0633 -123.060 28.000
G23 24779402.809 103668.5933 -1804.973 29.000
S35 39723700.845 69367.3942 -1208.954 44.000
> 2013 7 28 0 27 29.2000000 0 9
G10 20230515.955 77345.295 -1341.436 44.000
G12 21468350.548 106270.372 -1832.637 43.000
S38 38213304.199 70084.4922 -1212.840 45.000
G 5 22123786.091 -106831.642 1822.784 46.000
G25 23134435.278 -39190.987 657.344 40.000
G17 23230172.406 234019.092 -4048.079 41.000
G13 23968534.775 6473.9923 -125.373 28.000
G23 24779471.004 104029.6643 -1805.983 29.000
S35 39723747.025 69609.2902 -1209.259 44.000
如果我必须制作自定义解析器,
另一个棘手的问题是随着时间的推移,卫星ID随之而来
(如卫星“G 2”和“G 4”所示)
(加上他们在ID中也有空格)
因此,当我将它们读入DataFrame时,
当我找到它们时,我需要为新的列标签(或MultiIndex的行标签?)。
我最初认为这可以被视为MultiIndex问题,
但是我不太确定pandas read_csv能做什么
Jump to Reading DataFrame objects with MultiIndex
有什么建议吗?
相关来源如果感兴趣:
答案 0 :(得分:3)
这是我最终做的事情
df = readObs(indir, filename)
df.set_index(['%_GPST', 'satID'])
请注意,我只是在构建后设置了新的MultiIndex。
def readObs(dir, file):
df = pd.DataFrame()
#Grab header
header = ''
with open(dir + file) as handler:
for i, line in enumerate(handler):
header += line
if 'END OF HEADER' in line:
break
#Grab Data
with open(dir + file) as handler:
for i, line in enumerate(handler):
#Check for a Timestamp lable
if '> ' in line:
#Grab Timestamp
links = line.split()
index = datetime.strptime(' '.join(links[1:7]), '%Y %m %d %H %M %S.%f0')
#Identify number of satellites
satNum = int(links[8])
#For every sat
for j in range(satNum):
#just save the data as a string for now
satData = handler.readline()
#Fix the names
satdId = satData.replace("G ", "G0").split()[0]
#Make a dummy dataframe
dff = pd.DataFrame([[index,satdId,satData]], columns=['%_GPST','satID','satData'])
#Tack it on the end
df = df.append(dff)
return df, header
使用虚拟数据框似乎并不是最优雅的。
答案 1 :(得分:1)
我建议编写自定义解析器,逐行读取文件。
“G 5”之间的空格是编写自定义解析器的进一步提示
在这种情况下,你不能简单地用空格分割参数,
你必须一次读取所有3个字符,并删除第一个字符,并将剩余的两个字符(“5”)转换为卫星号码。