見出し画像

Python(pandas)を仕事ではこんなことに使っています(受注データから特定の文字列を含む行を抽出)

私の勤めている会社では商品がやや特殊であるため、受注データの管理はネット、FAX、その他含めすべての受注を自社のシステムで管理しています。

恐らく導入した時にあれもこれもと欲張ったせいか、1件の注文に対して入力可能な項目が83もあります。個人的にはその半分でも多いかとは思うのですが、他の部署では必要なのかもしれませんので、それはまあいいとします。

システムの導入から10年近く経っているようで、さすがに新しい商品やいろんな企画に対応できない部分も増えてきて、入力する人や、企画によって結構みんな好き勝手に入力しています。

残念な話ですが、ITリテラシーというものがお世辞にも高い会社ではありません。本当に不思議な話なのですが、登録したデータから作業指示書なりを作るのですが、その作業指示書をなぜだか手書きで修正したり、蛍光ペンでチェックを入れたりしています。
「なんでそんなことやってんの?」って聞くと、「できないから」だそうです。いくら10年前のシステムとはいえそれぐらいできるだろうと思うのですが、できないそうです。

そういうことがまかり通ってしまう会社なので、重要な情報でもなんとなく適当な項目に登録する程度のことは日常茶飯事で、データベースに蓄積されたデータを分析するのはなかなか至難の業です。
入力可能な項目が83もあるのですから好き勝手にやる気持ちもわからんでもないです。

いまのところほぼほぼ愚痴のみになってしまいましたが、本題はここから。
この適当に登録されたデータからどうやって必要なデータを抽出するか。

今回は期間限定(終了時期は未定)である商品をプレゼントするという企画なのですが、プレゼントは申告制で対象は全員ではない。一応、対象者は特定の文字列(仮にプレゼントとします)を、受注データに登録するが、登録項目は決まっていない。

この条件で対象者がどれだけいるかを知る必要があります。プレゼント商品には数に限りがあるから定期的に集計する必要があるのです。

プレゼントという文字列が決められた項目に登録されているなら今までにも似たようなことをやったことがあるので、なんの問題もなかったと思います。今回はどこに登録されているかわからないという、初めてのパターンだったので、ちょっと考えました。というか、考えてもらいました。
そう今回もChatGPTのお世話になりました。


いつものごとくあっさりと解決。
質問の回答をほぼそのままコピペしただけです。

import pandas as pd

df = pd.read_csv('filename')

df_ps =  df[df.applymap(lambda x: 'プレゼント' in str(x)).any(axis=1)] 
len(df_ps)

あまりにもあっさり解決しすぎて拍子抜けしました。
lambda式がどうも苦手で使い道があまりよくわかっていなかったのですが、今回で結構理解できた気がします。

恐らくexcelでもできるとは思うのですが、このコードを見る限りpythonの方が圧倒的に楽な気がします。

前半はほぼほぼ愚痴になってしまいましたが、こんな感じでpythonを仕事に使っているということの紹介とChatGPTはやっぱり便利だということの紹介でした。

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