使ってわかった、ExcelシートのPandasいじり

仕事で出席状況のシートをとりあえず個人単位で取得することはできたけど、生データなのでデータの抽出と単純な加工をして各人に公開できる資料を作ることにしました。いわゆるPandas案件ですが、こういうときには加工を書けては様子を見て、が多いのでインタラクティブ操作が重要です。

ということでJupyterLabをほぼ初めてに近い形で体験し、効率はともかく、見せても良いかなと言う状態までは持ち込めました。超初心者のあがきです。なお扉の写真はPandasだけにいっぱいパンダですw

準備

私はAnacondaなんてディストリビューションでストレージを無駄に消費するのは嫌なので、brewでpython@3.8等を入れた後、pipenvを入れた上で作業の準備に入ってます。

$ cd ~/data # データのあるディレクトリ
$ pipenv shell
$ pip install jupyterlab
$ jupyter lab

あとはしばらくブラウザです。新規Python3ノートを作り、その中でゴリゴリといじっていきます…

モジュールのインストールと読み込み

画像1

!pip install openpyxl pandas numpy xlrd --upgrade

を実行(Shift+Enter)して操作に必要そうなものをいれておきます。そしておもむろに元データを読み込みます。

画像2

これで変数dfで読み込んだシートが見えます。

各行に対象となる個人コードや個人名といったものがあるのですが、同一コード/同一名のはずなので、最初の要素を取得しても良いのでしょうが、念のためuniqueを通して最初のものを採る方法にしました。

試行錯誤の上で、個人名の情報と閲覧上必要となるデータを取得するコードとしては、概ねこんな感じになり、名前付きファイル名も生成できました。

画像3

情報の処理

閲覧できるようにしたいデータは、ステータス(状態、出席とか欠席とか)を数値で示したものになっているのですが、出席状態とされるものは正常と言うこともあってか値がないという状況になってます。ここがゼロならすごく処理が楽なのですが、NumpyやPandasにおいては欠損値(NaN)というものになってます。いったんゼロで埋めておきます。

画像5

これを後で結合すれば閲覧可能な状態へ持ち込めますが、実はステータスを個別に処理せずとも、表(DataFrame)の形でもfillna()使えるみたいですね。片はついたのでいじる気はありませんが。

これらの要素をcondat()でaxis=1(列要素を横並べで繋いでいく)して、ステータス値に合わせた実際の意味合いに調整すればOKです。

最後にto_excelでシートに首都しておけば、とりあえず見せられるものに、と。

感想

IDE(VScodeやEmacs)で一気に書いて処理というのは気持ちいいけど、どう動くかわからないものを試行錯誤でやると言うときは、やはりこういうインタラクティブ環境は便利です。ブラウザベースでどうかと思いましたが、案外サクサク使えたので良かったと思います。

残念な形式で存在するデータ(xlsとかいうやつ)をスクリプトで処理させていくと言うことに関しては、Jupyterの助けでどうにかやっていけそうです。

あとはオンラインで都度検索していけばそれなりの情報へ辿り着けるのでした。現代教養って、こういうオンラインでのリソース検索も必要ですよね。

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