跳到主要內容

[python] 使用 pandas 內插不完全的資料

朋友 pass 一份資料給我,希望可以幫忙處理掉 missing data ,將遺失的時間找出來,同時用內插補足遺失時間的座標。

資料長相:
Sec, North, East, Height
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
... 


你可以看到其中 94188s, 94191s~94193s 的資料是遺失的,就是要補足這些資料。

原本以為是個簡單的問題,結果一弄弄了兩天解不出來,真的是氣死我了,

還去查了 time format, pandas intersect...結果 try 了半天都得不到理想結果,

只好半放棄地去問 stackoverflow(連結在此),結果立馬有大神回覆,而且還是秒解!太神啦!


解法如下:


 
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

留言

這個網誌中的熱門文章

[電銲] 自己的 IMU 自己焊!笨蛋的焊接法!

工程師真的是被要求包山包海都要會... IMU的組件被要求不能只插麵包板,要 "穩固的固定在另外製作的盒子裡",反正就是搞得跟外面幾十萬上下的 IMU 一樣精緻就是了。 好好好都焊給你~ 呃 對了 怎麼焊哈哈哈哈 ^^" 電焊這種技術自從上過國中的生活科技後就再也沒再用了@@,好家在這是個網路就是你家的時代,立刻上網查一查,找到一些關於焊槍使用的相關資料。 被要求說GY-91不能只接麵包板一定焊死才穩固所以就這樣接了

[python] 使用 python 控制 docx 範例

因為同事的需求,無職 a 我就又再度幫忙同事寫一些小程式。 這些小程式雖然簡單,但是聽到如果不幫忙寫程式解決,以手工作業的"大量人天" 的後果真的是讓人吐血。 他們有一份工作,需要產出一份很多很多很多資料圖片的判釋報告,要把數百張圖片剪裁成特定大小,加上圖說之後放入 word 裡面。 聽到的做法是...一張一張插圖!! wooow! That's really shocking me! 所以為了前公司同事的幸福,我還是加減寫一下好了。

[Linux] 清除系統垃圾指令

可能因為安裝一些有的沒的,總覺得樹莓派 in Rasbian 有種越來越慢的趨勢,所以去網上搜尋清除 Linux 系統垃圾,得到以下答案(轉自 Jiaozn的博客 ): " 使用過Windows的人都知道,在使用windows系統的過程中系統會變得越來越慢。而對於Windows下飽受詬病的各種垃圾文件都需要自己想辦法刪除,不然系統將會變得越來越大,越來越遲鈍!windows怎麼清理垃圾相信大家都知道的,那麼linux下怎麼清理系統垃圾呢? Linux的文件系統比Windows的要優秀,不會產生碎片,對於長時間運行的服務器來說尤為重要,而且Linux系統本身也不會像Windows一樣產生大量的垃圾文件。不知道這個說法有沒有可信度!至少我們可以確定的是linux系統的文件系統是比較優秀的! "