파이썬으로 엑셀하기 - sumif 함수 구현

안녕하세요 오늘은 파이썬으로 sumif 함수를 구현하는 방법을 알아보겠습니다.

etc-image-0

파이썬으로 SUMIF 함수 구현하기

먼저 파이썬으로 sumif함수를 구현하기 위해서는 pandas 패키지 설치가 필요합니다.

판다스는 파이썬에서 데이터 분석을 위한 필수 라이브러리입니다.

pandas는 데이터 조작 및 분석을 위한 Python 프로그래밍 언어 용으로 작성된 소프트웨어 라이브러리입니다.
특히 숫자 테이블과 시계열 을 조작하기 위한 데이터 구조 와 연산을 제공합니다.

먼저 cmd를 입력하고 관리자 권한으로 명령프롬프트를 실행합니다.

etc-image-1

이 후 pip 명령어를 통해서 판다스를 설치해줍니다.

pip install pandas

etc-image-2

관련된 패키지까지 모두 설치가 완료되면 이제 파이썬에서 판다스 라이브러리를 불러와야 합니다.

import 명령어로 패키지를 불러옵니다. as는 약어로 앞으로 pd를 입력하면 판다스가 사용됩니다.

import pandas as pd

etc-image-3

이후 이제 엑셀을 불러와야 하는데요.

판다스 명령어준 read_excel 을 통해서 불러올 수 있습니다.

명령어 옵션이 많지만 pd.read_excel('파일명')을 통해 불러올 수 있습니다

df = pd.read_excel('test.xlsx')
pd.read_excel( io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0, convert_float=True, mangle_dupe_cols=True)

샘플 엑셀은 공공데이터 포탈에서 한번 가져와보겠습니다.

etc-image-4

test.xlsx 파일의 필드명은 아래와 같습니다.

etc-image-5

그리고 파이썬에서 엑셀의 sumif와 같은 값을 구현하기 위해서는 

groupby함수를 사용하면 되는데요.

사용법은 아래와 같습니다.

공식 자습서 링크

 

GroupBy — pandas 1.4.2 documentation

previous pandas.api.indexers.VariableOffsetWindowIndexer.get_window_bounds

pandas.pydata.org

dfsum = df.groupby('그룹이 될 컬럼')['값이 될 컬럼'].연산() 

다만 해당 파일을 실행할때 엑셀 라이브러리인 openpyxl이 없다는 에러가 나옵니다.

ImportError: Missing optional dependency 'openpyxl'.  Use pip or conda to install openpyxl.

etc-image-6

하지만 pip 업그레이드시 에러가 발생하였습니다.

ERROR: Could not install packages due to an OSError: [WinError 5] 액세스가 거부되었습니다: 'C:\\Users\\doruz\\AppData\\Local\\Temp\\pip-uninstall-0q9b656k\\pip.exe'
Consider using the `--user` option or check the permissions.

간혹 pip 업그레이드시 에러가 발생하는데요.아래 사이트에서 get-pip.py를 다운받으시거나,

제가 블로그에 올려놓은 아래 파일을 다운로드 받으시고 실행하시면 됩니다.

https://bootstrap.pypa.io/get-pip.py

get-pip.py
2.56MB
etc-image-7

이 때에는 위의 get-pip.py파일을 다운로드 받고

python get-pip.py를 통해서 pip를 다시 설치할 수 있습니다.

etc-image-8

이후 openpyxl을 설치하고 다시 실행하면 정상적으로 실행이 됩니다.

명령어는 동일합니다.

pip install openpyxl

etc-image-9

이제 정상적으로 설치가 되면, 다시 파이썬코드를 만들어보는데요.

저는 mean 함수를 이용해서 평균을 내어보았는데요.

etc-image-10

다만 군산과 파주, 서귀포는 6000m/s라는 이상한 값이 나왔는데요.

엑셀값을 실제로 열어서 분석해보니, 아마 측정이 안될 경우 9999로 표현되나 봅니다.

이 경우에는 에러가 되니, 해당 값들은 변경해야하는데요.

이렇게 하는 것을 전문적인 용어로 데이터 전처리라고 합니다.

etc-image-11

사실 데이터분석을 하다보면 자주 만나는 현상인데요.

오늘은 자세한 분석보다는 간단하게 실무에서 활용할 수 있는 방법을 알려드리겠습니다.

etc-image-12

이 경우에 가장 간단하게 변경하는 것은 replace함수를 이용하는 것인데요.

replace 함수를 통해서 할 수 있는데요.

이 함수 역시 자습서에서 자세한 용법을 확인할 수 있습니다.

 

pandas.DataFrame.replace — pandas 1.4.2 documentation

Regular expressions will only substitute on strings, meaning you cannot provide, for example, a regular expression matching floating point numbers and expect the columns in your frame that have a numeric dtype to be matched. However, if those floating poin

pandas.pydata.org

DataFrame.replace(to_replace=None, value=NoDefault.no_default, inplace=False, limit=None, regex=False, method=NoDefault.no_default)

df.replace(9999,0,inplace=True)라고 입력해서 값을 변경하면 

마지막 옵션인 inplace는 바로 적용되는 것으로 해당 옵션을 True로 설정하지 않으면 실제 값이 변경된 것이

반영되지는 않습니다.

해당 명령어를 실행한 다음에는 정상적인 값으로 나옴을 알 수 있습니다.

물론 해당 결측치를 중간값으로 대체하거나 다양한 방식으로 대체하면 보다 정확한 값을 얻을 수 있는데요.

오늘은 단순히 0으로 설정하는 방법만 알아보았습니다.

etc-image-13

오늘은 판다스 최초 설치부터 간단하게 sumif 함수를 구현하는 파이썬 코드까지 해봤는데요.

실제 업무에서 잘 사용하시기 바랍니다.

실제 오늘 실행한 코드는 아래에 첨부하였습니다. 참고해보시기 바랍니다.

아주 간단한 코드라 누구나 쉽게 따라하실 수 있습니다.

import pandas as pd

df = pd.read_excel('test.xlsx')

df.replace(9999,0,inplace=True)

dfsum = df.groupby('지점명')['풍속(m/s)'].mean()



print(dfsum)

 

728x90

해당 블로그에서 발행되는 콘텐츠 중 일부 글에는 제휴 및 홍보 관련 링크가 포함될 수 있으며, 파트너스 활동의 일환으로 일정액의 수수료를 받을 수 있습니다.

dorudoru님의
글이 좋았다면 응원을 보내주세요!