##モチベーション
Python pandasでExcel集計 その1の続きです。
dictを繋げる関数を2回呼び出している箇所がダサい。1関数にしたい。
解決策の1つとして、可変引数化する。
##環境
windows10
python3.9
VS Code
Pandas
openpyxl
##準備
python、pandasのinstall(pip使ってね)は済んでる前提
早速答え
pandas_lib.pyで2関数定義
dict型の引数を複数持てる関数concatenateDictsを追加。
pandas_lib.py
import pandas as pd # pandasは、Pythonにおいて、データ解析を支援する機能を提供するライブラリ
import numpy as np
# keyでGroupingしてカウント
def countByKeyFromFileAndSheet(filename, sheetname, key):
df = pd.read_excel(filename, sheet_name=sheetname, engine="openpyxl")
dict = df[key].value_counts().to_dict()
return dict
def concatenateDicts(*dicts):
newdict = {} # empty dict
for dict in dicts:
print(dict)
for k in dict:
if k in newdict: # key detected in newdict
newdict[k] += dict[k]
else: # not detected
newdict[k] = dict[k]
return newdict
pandas_main.py
concatenateDictを2回呼び出していたところをconcatenateDictsの一回呼び出しにできた。
pandas_main.py
import pandas_lib as pl
dict1 = pl.countByKeyFromFileAndSheet("./example.xlsx", "Sheet1", "部署")
dict2 = pl.countByKeyFromFileAndSheet("./example.xlsx", "Sheet2", "部署")
dict3 = pl.countByKeyFromFileAndSheet("./example.xlsx", "Sheet3", "部署")
dict = pl.concatenateDicts(dict1, dict2, dict3)
print(dict)
実行結果
当然ですが、結果は変わりません。
{'営業部': 4, '開発部': 3, '総務部': 3}
{'営業部': 5, '開発部': 3, '経理部': 2}
{'開発部': 9, '経理部': 1}
{'営業部': 9, '開発部': 15, '総務部': 3, '経理部': 3}