複数の特定の文字列を含むセルに色をつける(Python Pandas)

仕事でお客様のメッセージを商品に印刷するということをやっています。
基本的にはネット注文で承っていますので、お客様自身にメッセージを入力していただくのですが、注文時のお客様の入力ミスで印刷した後に発見され、作り直しという事態が定期的に発生します。
お客様の間違いとはいえ、気付いてしまった以上そのまま出すわけにはいかないので、確認をとった上、作り直します。

なんとかならないものかと前々から思っていましたが、基本的にはこのメッセージのチェックは前工程での作業で、うちの部署では前工程から回ってきた指示書通りに機械的にデータを作り、印刷するだけなので、前工程の人には気をつけて見てくださいねと言う程度で終わっていました。
人間がやることですので、チェックをすり抜けてしまうことがあるのは仕方のないことです。

とはいえ、そうなった時に実際に大変な思いをするのはうちの部署を含めた製造部門で、まず他部署で間違った印刷を消してもらい(この部署にとっては全く責任のないことなので申し訳なく思っています)、うちの部署では再度同じ作業をすることになります。


つい先日も起きました。
他部署の作業とはいえ、さすがにそろそろなんとかしようと思い、よくよく考えたらプログラミングで多少はなんとかなると気が付きました。
実は、お客様の入力ミスは、漢字の間違いや文字の抜け、スペルミスなどある程度パターンが決まっています。せめてこれらぐらいは事前にチェックしようと考えました。

うちの部署では、向こう2週間ぐらいの出荷予定数量をPython、Pandasを使って毎朝出力しています。
その元となるデータは受注用のデータベースで、その中にはお客様が入力したメッセージも当然含まれています。
なので、出荷予定を出力する際についでにメッセージ内容もチェックしてしまおうと考えました。よくある間違いがメッセージに含まれているかどうかをチェックするのです。
Pandasを使っているので、特定の文字列(よくある間違いの文字列)を含む行を抽出し、その文字列を含むセルに色を付ければすぐに見つけられそうです。

結果、こんな感じのコードになりました。

import pandas as pd

#仮のデータ
data = {
    'a': ['りごん', 'バナナ', 'みかん', 'いちご', 'ぶどう', 'メロン', 'さくらんぼ', 'パイナポ', 'キウイ', 'マンゴー'],
    'b': ['オレンジ', 'パイナップル', 'いちご', 'ぶどう', 'キウイ', 'レモン', 'さくらんぼ', 'りんご', 'みかん', 'ブルーバリー'],
    'c': ['パイナップル', 'いちご', 'みかん', 'キウイ', 'ぶどう', 'ババナ', 'オレンジ', 'さくらんぼ', 'マンゴー', 'りんご']
}

df = pd.DataFrame(data)

#検索する文字列
words= ['りごん', 'パイナポ', 'ブルーバリー', 'ババナ']

#検索する文字列を含む
df_error = df[df.applymap(lambda x: any(word in str(x) for word in words)).any(axis=1)]


 #セルの背景に色をつける関数 def highlight_cells(s, user_inputs):
    return ['background-color: yellow' if any(user_input in str(v) for user_input in user_inputs) else '' for v in s]

styled_df = df_error.style.apply(highlight_cells, user_inputs=words)

print(styled_df)


よくある間違いを含む文字列を含む行だけ抽出された上、それを含むセルに色がつけられました。

高階関数を少し覚えたおかげでできるようになったことが少し増えました。
このプログラムが役立つ日がこないにこしたことはありませんが、機能するところを見たい気がしないこともありません。

この記事が気に入ったらサポートをしてみませんか?