【Python】Pandas DFで欠落データ行追加でハマった<VBとかDataGridViewとは違う>

スキー場でSTA24システム計測実験が軌道にのってきて大量のデータがログできたのですが、あまりにも処理が大変で、Excelでは無理なのでPythonでやるのががSTA24の春からの目標となってます。

 

●最初にはまった点
①RTKデータの欠番を埋めるやり方がわからない
  VB,C#のDataGridなら、Insert コマンド一発で行を途中で挿入できるのですが、
   pandas DataFrameのInsertは、列挿入にしか使えませんでした。行挿入の便利コマンドはありませんでした。下記LINKを見ると 使うとしたら3種類の選択があるそうです。
https://note.nkmk.me/python-pandas-assign-append/

  しかし、append命令は、非推奨で使うなということで、困ってしまいました。

   慣れた人ならほいほいと出来るのでしょうが、初めてだと、あちこちで不具合があるので
エラーが出たら最後で、どこが原因か突き止めることができません。
そこで、エラーが出ない方法を試行錯誤で探しました。

作戦1:挿入したい行データをまとめてDFの下端に追加して、1本のDFでSORTでそろえる。
作戦2:DFで、操作listで全データを作って、新たなDFを作成してから、SORTさせる。
この方法が速いという記事があって、感謝しております。

http://taustation.com/pandas-dataframe-appending-speed/#loc

DataFrameのスピード~行の追加

このページで既存のDFに行を追加する方法で高速なやり方をご紹介されてました。
まずは、サンプルプログラムがあるので、コピペして走らせると1万行が一瞬で追加できました。
これならいいということで、このやり方を真似させていただきました。
1)既存のDFからlistを作成 list_data=[]
2)listに既存の全DFデータをコピー  list_data = df_Base.to_numpy().tolist()
3)挿入したいlistを作成 c=[]
4)挿入したいlistの1行分データ作成       for i in range(0,N):
c.append(data[i])
5)1行分list cができたら母艦list_dataに追加  list_data.append(c)

6)所望の行数だけ、list_dataに追加したら、終了して次のステップ
7)list_dataから新たなDFを作成          df_Basew2= pd.DataFrame(list_data, columns=headB)

   やり方8:sortして、挿入した行を正規の順番に配置替え  df_Base2=df_Base2.sort_values(“iTOW_B”,ascending = True)

  GISTに私のつくりかけのプログラム載せてありますが、専用CSVがないと動きません
https://gist.github.com/dj1711572002/4a826a4706b18ea091faafc51ccd72f4

 

●以後

pands DFは、使い方に慣れれば、すごく生産性があがることが判ってきたので、慣れるまで数か月かける意義はあると思います。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です