Python pandas에서 Excel 집계 1

동기 부여



Excel의 정보를 집계하는데 시트에 계산식인지 엉망이 되면 움직임 느려진다. Python+Excel 관련 책을 서점에서 볼 수 있게 되었고, 공부하자.

환경



windows10
python3.9
VS Code
Pandas
openpyxl

준비



파이썬, pandas의 install (pip 사용해)는 끝난 전제

제목



이런 Excel이 있다.
특징으로는 부서의 열이 시트에 따라 다르다. (노란색 열입니다)
부서별 인원수를 집계하고 싶다.


sheet1
sheet2
sheet3







빠른 답변



pandas_lib.py에서 2 함수 정의


  • countByKeyFromFileAndSheet:key 열을 집계하는 함수: pandas 함수의 value_counts() 를 사용하여 집계하고 to_dict() 로 dict 형식으로 변환합니다.
  • concatenateDict : dict를 2 개 연결하는 함수

  • 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()
      print(dict)
      return dict
    
    def concatenateDict(dict1, dict2):
      newdict=dict1
      for k in dict2:
        if k in newdict:
          newdict[k] += dict2[k]
        else:
          #newdict.update(k, dict2[k])
          newdict[k] = dict2[k]
      return newdict
    

    팬더 s_미안. py



    countByKeyFromFileAndSheet로 Sheet1~3의 부서명의 열을 집계해,dict에 격납해 두고,concatenateDict로dict를 연결해dict를 생성한다.

    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.concatenateDict(dict1, dict2)
    dict = pl.concatenateDict(dict, dict3)
    
    print(dict)
    

    실행 결과



    dict1-3에 집계 후, 최종적으로 3 시트 합계의 집계가 되어 있는 것을 알 수 있습니다.
    {'営業部': 4, '開発部': 3, '総務部': 3}
    {'営業部': 5, '開発部': 3, '経理部': 2}
    {'開発部': 9, '経理部': 1}
    {'営業部': 9, '開発部': 15, '総務部': 3, '経理部': 3}
    

    마지막으로



    concatenateDict의 중 for 문을 사용하여 진흙으로 구현했습니다만, 그 밖에 더 스마트한 구현 방법 있으면, 가르쳐 주셨으면 합니다.

    좋은 웹페이지 즐겨찾기