IQ Botのカスタムロジックの概要について、先日以下の記事でご紹介しました。
カスタムロジックはPythonというプログラミング言語そのものではあるんですが、
プログラミングの知識がないと使いこなせないかというと、そんなことはありません。
この記事では、コード自体は簡単ですが実際に業務で使う8~9割を占める
「置換」の処理について、コードと使用例をご紹介していきます。
上記の記事でもご紹介したとおり、
フィールド項目とテーブル項目で若干考え方が違うので、それぞれ紹介します。
#フィールド項目に対する置換処理
まずはより基本編となるフィールド項目から。
置換のロジックはめちゃ簡単ですが、実際に業務で使うカスタムロジックの8~9割はこれです。
##基本のコード
field_value = field_value.replace("置換前の文字列","置換後の文字列")
以下のように改行して、同じ項目に対して複数の置換処理を定義することが可能です。
field_value = field_value.replace("置換前の文字列1","置換後の文字列1")
field_value = field_value.replace("置換前の文字列2","置換後の文字列2")
たったこれだけのコードですが、以下のようにいろいろ応用できます。
##置換処理の使い道いろいろ
- 空欄を埋める
field_value.replace(" ","")
で、空欄を埋められます。
余談ですが、IQ Botは改行ありの値を読み込んだ場合に、仕様として改行部分が空欄に変換されます。
- オーと読まれた文字をゼロに変換(パターンの決まった文字化けの補正)
field_value.replace("O","0")
で、オーをゼロに変換できます。
同じ要領で、
l(エル)やI(アイ)や|(パイプライン)を1(いち)に置き換えたり、
棘を東京に置き換えたり、
▲で表記されたマイナスをマイナス符号に置き換えたりなど、
いろいろできます。
- 形式の変換
「2020年4月6日」を「2020/4/6」のような形式に直したい場合も、置換で対応できます。
field_value = field_value.replace("年","/")
field_value = field_value.replace("月","/")
field_value = field_value.replace("日","")
- ノイズの除外
OCRで帳票を処理すると、紙の汚れや人がボールペンでチェックしたマークなどが、
ピリオド、カンマ、コロン、セミコロン、スラッシュ、クオーテーション、ダブルクオーテーション 等々の
ノイズとして読み込まれてしまうケースが多々あります。
そうした記号が不要な項目であれば、field_value.replace("除外したいノイズ","")
でノイズの除外ができます。
なお、置換前の文字列や置換後の文字列は、
ダブルクオーテーション(")かシングルクオーテーション(')のどちらかで囲まれていれば大丈夫です。
除外したいノイズ自体にダブルクオーテーションやシングルクオーテーションが入っている場合は、
以下のように定義すれば大丈夫です。
#シングルクオーテーションを除外する場合は、ダブルクオーテーションで囲む
field_value = field_value.replace("'","")
#ダブルクオーテーションを除外する場合は、シングルクオーテーションで囲む
field_value = field_value.replace('"',"")
#テーブル項目に対する置換処理
テーブル項目の場合は、ちょっと書き方が変わりますが、それでも簡単です。
こちらで説明した「おまじないコード」の間に・・・
このように↓書きます。
df['列名'] = df['列名'].str.replace('置換前の文字列', '置換後の文字列')
列名はIQ Botで帳票設定するときに定義したこちら↓の列名をそのまま使います。
日本語の列名でも普通に動きますが、
列名にスペースが含まれている場合は、スペースはアンスコ(_)に置き換えます。
例えば上記の「金額」と「金額 税込」の列から、「円」という単位を除外したい場合は以下のように処理します。
df['金額'] = df['金額'].str.replace('円', '')
df['金額_税込'] = df['金額_税込'].str.replace('円', '')
#まとめ
- 置換の処理は簡単だけど、業務で使うカスタムロジックのほとんどはこれだよ
- 置換処理の仕組みを使って、パターンの決まった文字化け補正や空欄埋め、ノイズの除外などいろいろできるよ
- テーブルの場合は列名を指定するよ
- テーブルの列名にスペースが含まれている場合は、アンスコ(_)に置き換えるよ
いかがでしたか?
置換処理を適切に使うと、簡単にインプットデータの質を上げられて自動化がしやすくなるので、ぜひ試してみてください!