IQ Bot テーブルの空欄を埋める


IQ Botを使って、空欄行を埋めるやりかたを解説します。

イメージ

以下のような処理を行います。

やりかた

テーブルに対するカスタムロジックを使って、以下のように処理します。

空欄埋めのカスタムロジック実装例

# 値を保存する変数: table_values
#表の操作をするときに必ず入れるコード(最初)
import pandas as pd
df = pd.DataFrame(table_values)

#############################################
# ↓↓↓ ここからが今回の処理 ↓↓↓ 
#############################################

#日付の空欄埋め
vDate = ""
for i in range(len(df)):
  if df.at[str(i),"日付"] != "":
    vDate = df.at[str(i),"日付"]
  else:
    df.at[str(i),"日付"] = vDate

#伝票番号の空欄埋め
vDenpyoNo = ""
for i in range(len(df)):
  #df.at[str(i),"伝票番号"] = "aaa"
  if df.at[str(i),"伝票番号"] != "":
    vDenpyoNo = df.at[str(i),"伝票番号"]
  else:
    df.at[str(i),"伝票番号"] = vDenpyoNo  

#############################################
# ↑↑↑ ここまでが今回の処理 ↑↑↑
#############################################    

#表の操作をするときに必ず入れるコード(最後)
table_values = df.to_dict()

解説

上記のカスタムロジックを読んで、何をやっているか想像がついた方は、解説は読み飛ばしてOKです。

処理のポイント

上記の日付、伝票番号とも、処理の仕組みとしてはまったく同じことをやっています。
日付なら日付、伝票番号なら伝票番号の列を1行ずつ読んでいき、値が入っていればそれを変数に格納し、空欄であれば変数の値を代入するという処理です。

空欄埋めのカスタムロジック抜粋

#日付の空欄埋め
vDate = ""                         # 変数の初期化
for i in range(len(df)):           # 抽出結果のテーブルを1行1行処理する(処理中の行をi番目とする)
  if df.at[str(i),"日付"] != "":   # i番目の行の日付欄の値が空欄でなかったら(★)
    vDate = df.at[str(i),"日付"]   #  → 変数に日付欄の値を入れる
  else:                            # ★以外の場合(=i番目の行の日付欄の値が空欄だったら)
    df.at[str(i),"日付"] = vDate   #  → 変数の値で日付欄を埋める

応用ポイント

上記のロジックを自分の業務に当てはめて応用したい場合、基本的に変える部分はdf.at[str(i),"日付"]の中の"日付"の部分だけでOKです。

この部分を、自分が処理したいIQ Botのテーブル項目名に変えます。

IQ Botの項目名にスペースが含まれている場合は、スペース部分はアンダースコア(_)に置き換えます。

「伝票番号」という項目に対して処理したい場合はdf.at[str(i),"伝票番号"]に、
「明細 消費税」という項目に対して処理したい場合はdf.at[str(i),"明細_消費税"]に変えるという要領です。

上記の例のvDatevDenpyoNoはただの変数名なので変えなくても動きますが、見た目のわかりやすさを考えると、しかるべき名前に変えておいた方がいいでしょう(消費税欄ならvTaxなど)。