我有一些关于处理 GPS 数据的问题, 我对 Stackoverflow 和 Pandas 文档做了一些研究...但我仍然不明白如何处理我的数据...
这是我的原始数据的示例:
二段、北段、东段、高度
94184、167433.988、2529517.036、19.623
94185、167434.573、2529516.984、19.678
94186、167433.788、2529516.993、19.598
94187、167433.804、2529516.966、19.606
94189、167433.852、2529516.910、19.604
94190、167433.872、2529516.882、19.602
94194、167433.919、2529516.825、19.602
...
第一列是时间(秒), 第二、三、四列是坐标位置。
您可以看到一些数据丢失,例如 94188 或 94191~94193。
我可以用 pandas 读取这个 txt 文件,但现在我不知道如何处理以下问题:
- 我想将“秒”列更改为时间格式。我发现有很多时间格式,如时间增量、数据时间等...但我不知道哪一种适合这种情况(也许时间增量更好?“秒”列的数字是记录数据的计时器打开 GPS)。如果时间增量很好,我如何将“秒”列(int)更改为 pandas 中的时间增量格式...
- 我想创建一个新的连续时间数据框来处理我的数据,例如:
二段、北段、东段、高度
94184、167433.988、2529517.036、19.623
94185、167434.573、2529516.984、19.678
94186、167433.788、2529516.993、19.598
94187、167433.804、2529516.966、19.606
94188,NaN,NaN,NaN
94189、167433.852、2529516.910、19.604
94190、167433.872、2529516.882、19.602
94191,NaN,NaN,NaN
94192,NaN,NaN,NaN
94193,NaN,NaN,NaN
94194、167433.919、2529516.825、19.602
我尝试了下面的代码。
df1 = pd.read_table('data.txt',sep='\s+', names=['T','N','E','Z'], header=None)
df_full = pd.DataFrame({'T':np.arange(df1['T'].min(), df1['T'].max()),
'N':np.arange(df1['T'].min(), df1['T'].max()),
'E':np.arange(df1['T'].min(), df1['T'].max()),
'Z':np.arange(df1['T'].min(), df1['T'].max())
})
#Reading file successful.
现在我想通过检查 df1 和 df_full 是否具有相同的 T 列值来填充 df_full 的行,或者填充 NaN。
for i in range(df_full.size):
df_full[i] = df1[df_full.T == df1.T]
而且它不起作用......
- 如果我可以用 NaN 成功填充 df_full,现在我想插入缺失的数据,有什么建议文档吗?
Pandas 是一个如此强大的工具,我真的很想了解如何使用它......
非常感谢!
最佳答案
IIUC 您可以按如下方式进行:
In [63]: df
Out[63]:
Sec North East Height
0 94184 167433.988 2529517.036 19.623
1 94185 167434.573 2529516.984 19.678
2 94186 167433.788 2529516.993 19.598
3 94187 167433.804 2529516.966 19.606
4 94189 167433.852 2529516.910 19.604
5 94190 167433.872 2529516.882 19.602
6 94194 167433.919 2529516.825 19.602
In [64]: df = df.set_index(df.pop('Sec'))
In [65]: df
Out[65]:
North East Height
Sec
94184 167433.988 2529517.036 19.623
94185 167434.573 2529516.984 19.678
94186 167433.788 2529516.993 19.598
94187 167433.804 2529516.966 19.606
94189 167433.852 2529516.910 19.604
94190 167433.872 2529516.882 19.602
94194 167433.919 2529516.825 19.602
In [66]: df = df.reindex(np.arange(df.index.min(), df.index.max()+1))
In [67]: df
Out[67]:
North East Height
Sec
94184 167433.988 2529517.036 19.623
94185 167434.573 2529516.984 19.678
94186 167433.788 2529516.993 19.598
94187 167433.804 2529516.966 19.606
94188 NaN NaN NaN
94189 167433.852 2529516.910 19.604
94190 167433.872 2529516.882 19.602
94191 NaN NaN NaN
94192 NaN NaN NaN
94193 NaN NaN NaN
94194 167433.919 2529516.825 19.602
In [68]: df.interpolate()
Out[68]:
North East Height
Sec
94184 167433.98800 2.529517e+06 19.623
94185 167434.57300 2.529517e+06 19.678
94186 167433.78800 2.529517e+06 19.598
94187 167433.80400 2.529517e+06 19.606
94188 167433.82800 2.529517e+06 19.605
94189 167433.85200 2.529517e+06 19.604
94190 167433.87200 2.529517e+06 19.602
94191 167433.88375 2.529517e+06 19.602
94192 167433.89550 2.529517e+06 19.602
94193 167433.90725 2.529517e+06 19.602
94194 167433.91900 2.529517e+06 19.602
In [69]: df.interpolate().reset_index()
Out[69]:
Sec North East Height
0 94184 167433.98800 2.529517e+06 19.623
1 94185 167434.57300 2.529517e+06 19.678
2 94186 167433.78800 2.529517e+06 19.598
3 94187 167433.80400 2.529517e+06 19.606
4 94188 167433.82800 2.529517e+06 19.605
5 94189 167433.85200 2.529517e+06 19.604
6 94190 167433.87200 2.529517e+06 19.602
7 94191 167433.88375 2.529517e+06 19.602
8 94192 167433.89550 2.529517e+06 19.602
9 94193 167433.90725 2.529517e+06 19.602
10 94194 167433.91900 2.529517e+06 19.602
关于python - 使用 Pandas 处理 GPS 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45089382/