2023年8月よりクロスマートのバックエンドエンジニアとして入社しました中松です。
フルリモートで大阪から参画させていただいてます。
オフィスに一度も行かないまま入社したのが衝撃的でした!
違う業界からのジョブチェンジになるので、Python以外の実務経験はほぼなく、
しかも息子がまだ0歳という状態からクロスマートで働かせていただいており、
チャンスやご縁をくださった方々には感謝です。
小さなお子さんがいらっしゃる方も多く、非常に家族を大切にしていらっしゃる方が多いのがとても印象的です。
今更だけどpandasすごい
Python歴はそこそこあるもののpandasを知りませんでした(恥)
csv(表データ)をゴニョゴニョする上でこんなに便利なライブラリがあったとは!
まず、pandasで扱うDataFrame型にcsvのデータを読み込みます。
import pandas as pd df = pd.read_csv("sample.csv")
これだけ!短い!
請求書の機能を作成する際に実際に使った便利pandasを紹介!
クロスオーダー請求書では外部のシステムから出力されたcsvデータを読み込んで請求書を作成しています。
請求書番号 | 合計金額 | 取引先コード | 商品名 | 個数 | 明細金額 |
1000001 | 4000 | A111 | 豚肉 | 1 | 1000 |
1000001 | 4000 | A111 | 鶏肉 | 2 | 1600 |
1000001 | 4000 | A111 | 牛肉 | 1 | 1400 |
このようなデータを使っています。(実際のデータはもっと項目数が多いです)
これで1枚の請求書が出来上がります。
① 請求書のデータが2つに分かれている
合算.csv
請求書番号 | 合計金額 | 取引先コード |
1000001 | 4000 | A111 |
明細.csv
取引先コード | 商品名 | 個数 | 明細金額 |
A111 | 豚肉 | 1 | 1000 |
A111 | 鶏肉 | 2 | 1600 |
A111 | 牛肉 | 1 | 1400 |
これでは既存のシステムに取り込めないため、マージすることにしました。
df_total = pd.read_csv("合算.csv") df_detail = pd.read_csv("明細.csv") df = pd.merge(df_detail, df_total, left_on="取引先コード", right_on="取引先コード", suffixes=(None, "_y"), how="left", indicator=True)
これだけ!
マージするキーを指定してますが、同じ場合省略しても良いです。
請求書番号 | 合計金額 | 取引先コード | 商品名 | 個数 | 明細金額 | _merge |
1000001 | 4000 | A111 | 豚肉 | 1 | 1000 | both |
1000001 | 4000 | A111 | 鶏肉 | 2 | 1600 | both |
1000001 | 4000 | A111 | 牛肉 | 1 | 1400 | both |
indicatorをTrueにしておくだけで、どちらのデータに存在しているかの情報を付与してくれます。
こちらも大変便利です!
② 請求書のデータを置換したい
請求書のデータの一部を置換したい要望があがりました。
今回使用しているデータで取引先コードを1234に変更したいとします。
df["取引先コード"].replace({"A111": "1234"}, inplace=True)
これだけで該当するデータを置換してくれます!
どちらもすごく短いコードで簡単にかけるので驚きでした。。
pandasのよりパフォーマンスが上がったバージョンとして、
polarsというモジュールもあります。
よりたくさんのデータを処理する場合、polarsを使用していきたいですね。