python - 使用 Pandas 处理 GPS 数据

标签 python pandas numpy

我有一些关于处理 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 文件,但现在我不知道如何处理以下问题:

  1. 我想将“秒”列更改为时间格式。我发现有很多时间格式,如时间增量、数据时间等...但我不知道哪一种适合这种情况(也许时间增量更好?“秒”列的数字是记录数据的计时器打开 GPS)。如果时间增量很好,我如何将“秒”列(int)更改为 pandas 中的时间增量格式...


  2. 我想创建一个新的连续时间数据框来处理我的数据,例如:

二段、北段、东段、高度
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/

    相关文章:

    Python Pandas - 如何使用键的存在过滤具有包含字典的列的数据框?

    python - 如何使 python numpy 日期时间范围

    python - ValueError : The truth value of array with more than one element is ambiguous. 使用 a.any() 或 a.all()

    python - Numpy 数组索引行为

    python - Python的select模块中的select()函数究竟是如何工作的呢?

    python - 更改日期和时间的格式

    python - 如何使 "ctrl+Enter"在 vscode 中与 Jupyter 一起工作?

    python - 获取数据框中特定数据点的行和列标签

    python - 在并发请求的情况下,将数据存储在 Django 应用程序中的 "thread local storage"中是否安全?

    python - 在 Pandas 中通过不同方式聚合列来使用 groupby