[무역 | Phase2] 보건용 마스크 수출입 동향 - Python pandas 기본 (1부)
제 1번 자료 2019.1~ 2020.4 완제 마스크 (HS code 6307909000)의 월별 수출입실적 데이터 가공
작성한 code를 먼저 보여 드리고, 각 라인별로 의미를 설명 드리겠습니다.
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/batang.ttc").get_name()
rc('font', family=font_name)
# 품목별 수출입실적 xlsx 파일을 pandas DataFrame으로 불러오기
a1 = pd.read_excel('경로명\\품목별 수출입실적_6307909000.xlsx')
# 불필요한 1번~4번행 지우기
a2 = a1.drop(a1.index[0:3])
# 불필요한 6번행 지우고, DataFrame의 index값을 다시 부여하기
a3 = a2.drop(a1.index[4]).reset_index()
# reset_index로 부여된 index만 남기고 Series로 변경된 기존 index열 지우기
a4 = a3.drop(['index'], axis=1)
# DataFrame의 첫행으로 인식되어 있는, 열이름을 DataFrame의 Series 이름으로 재인식시키기
a5 = a4.rename(columns=a4.iloc[0])
# Series이름으로 재인식된 첫행 삭제하기
a6 = a5.drop(a5.index[0])
a6['수출금액'] = a6['수출금액'].str.replace(pat=r',', repl=r'', regex=True)
# 3 단계. 재시도.
a6['수출금액'] = a6['수출금액'].astype('float64')
# 자료형 변환 성공. '수입금액'. '무역수지'에도 적용하기.
a6['수입금액'] = a6['수입금액'].str.replace(pat=r',', repl=r'', regex=True)
a6['무역수지'] = a6['무역수지'].str.replace(pat=r',', repl=r'', regex=True)
a6['수입금액'] = a6['수입금액'].astype('float64')
a6['무역수지'] = a6['무역수지'].astype('float64')
1) import pandas as pd
import matplotlib.pyplot as plt
pandas 라이브러리와 matplotlib.pyplot 라이브러리를 불러옵니다.
2) from matplotlib import font_manager, rc
font_name = font_manager.FontProperties(fname="c:/Windows/Fonts/batang.ttc").get_name()
rc('font', family=font_name)
matplotlib에 포함된 font_manager를 통해, Data Set 내의 한글을 인식할 수 있도록 합니다.
이 코드에 관해서는 아래 포스팅에서 상세하게 설명 드렸으니, 상세가 궁금하시면 아래 포스팅을 참조해 주세요.
링크 : [부동산 | Phase3] 아파트 현황조사(고양시) - Data Visualization / matplotlib (1부)
3) a1 = pd.read_excel('C:\\Users\\USER\\Desktop\\example\\Trade\\품목별 수출입실적_6307909000.xlsx')
이번 자료를 DataFrame으로 불러 들이기 위해, read_excel() 메소드를 이용하였습니다.
다행히, 아파트 현황조사(고양시) 때에 발생했던, 한글 인코딩 문제는 발생하지 않고 잘 인식 되어 집니다.
데이터 프레임으로 읽어 들이면, 아래와 같은 결과를 파이참 터미널을 통해 확인하실 수 있습니다.
raw data에서도 제 1행부터 4행까지는 제목과 검색 조회 요건등이 표기됩니다. 관세청 무역통계 사이트에서 사용자가 조회 내용을 엑셀 파일로 다운로드할 때는 이와 같은 형식이 되도록, 세팅해 놓은 것입니다.
1행부터 4행까지는 우리의 통계에 쓸모가 없기 때문에, 인식된 DataFrame의 정리가 필요하겠습니다.
pandas DataFrame에서 특정 행 삭제하기. df.drop()
4) a2 = a1.drop(a1.index[0:3])
불필요한 엑셀파일의 1번부터 4번행을 DataFrame a2상에서 지워줍니다.
pandas DataFrame에서 특정 행을 삭제하고 싶으실 때에 drop()을 사용할 수 있습니다.
여기서 기입된 인자인 a1.index[0:3]은 a1이라는 DataFrame에서 인덱스번호기준으로 0부터 2번까지 총 3개 행을 지정한 것입니다.
그런데, 이상합니다. 분명, 엑셀은 1 번부터 4번행의 총 4개행이 불필요한 자료를 가진 것으로 되어 있습니다. 그런데, 필자는 3개 행을 지정해 지웠습니다. 왜일까요? 처음엑셀을 DataFrame으로 불러 들였을 때 '품목별 수출입실적'이라는 데이터 값을 Series의 이름으로 인식하고 2번행부터를 Data로 인식했기 때문입니다. Series의 이름도 조정이 필요함을 알 수 있는 대목입니다.
이 코드를 실행한 결과를 print하면 다음과 같은 결과가 얻어집니다.
인덱스번호 3번의 진정한 Series 이름들부터 DataFrame의 값이 남은 것을 확인하실 수 있습니다.
pandas DataFrame 인덱스 재설정하기 df.reset_index()
5) a3 = a2.drop(a1.index[4]).reset_index()
새로 생성된 a2 DataFrame에서는 마찬가지로, 4번 index행이 필요가 없는 데이터입니다. 총계값을 담고 있는데, DataFrame의 활용성만 떨어 뜨릴 뿐, 의미가 없으니 삭제하여야 되겠습니다.
여기서, 다시 필자는 reset_index()라는 메소드를 추가로 사용하였습니다.
reset_index()는 해당 DataFrame이 가지고 있는 기존의 index값을 초기화 해줍니다. 4)번 코드를 실행한 결과를 보시면 인덱스번호가 3번부터 시작하는데요. 파이썬에서는 순서를 매길 때, 번호가 0부터 시작됨이 기본입니다. 우리가 현재 만지고 있는 DataFrame의 불필요한 행삭제 작업이 끝났으니, index번호를 첫행부터 0으로 다시 부여해 주기 위해 적용한 것입니다.
이 코드를 실행한 결과를 print(a3)하면 다음과 같은 결과가 얻어집니다.
보시는 것처럼, 인덱스번호가 첫행에 0부터 새로이 부여 되었습니다.
그런데, 한가지 주목할 점은 기존의 index번호는 이 DataFrame에 그대로 남았으며, 심지어 'index'라는 이름을 가지고 Series의 형태로 들어가 버렸습니다. 이 또한 불필요하니, 6)번 코드로 지우도록 하겠습니다.
pandas DataFrame에서 특정 열 삭제하기. df.drop(axis=1)
6) a4 = a3.drop(['index'], axis=1)
앞선, 4)번 및 5)코드를 통해 DataFrame에서 행을 삭제하는 방법을 배웠습니다.
그렇다면 Series(열)을 삭제할 땐 어떤 메소드를 쓸까요? 마찬가지로 DataFrame에서는 drop()을 이용합니다.
그런데, axis라는 인자값으로 '1'을 주었네요.
이 axis는 열(Series) 방향으로 지우라는 의미에서 부여됩니다. '0'의 값을 주면 행 방향으로 지우게 됩니다.
drop() 메소드의 axis 인자값은 default가 '0'이기 때문에, 아무 인자값을 주지 않으면, 행방향으로 지우게 됩니다.
한편으로, 열 방향. 즉, Series 전체를 지우도록 Series명을 리스트 형태를 묶을 때 쓰는 대괄호[]에 넣어서 표현하였으니, Series삭제 때 참조해 주시면 되겠습니다.
이 코드를 실행한 결과를 print(a4)하면 다음과 같은 결과가 얻어집니다.
index로 명칭된 Series가 잘 삭제 되었고, 이제 DataFrame이 모양새가 어느 정도 아름답게 정리된 것이 확인 됩니다.
벌써, 스크롤의 압박이 오네요. 7)번 코드부터 2부에서 계속하도록 하겠습니다.
(2부에서 계속..)
NPU(엔피유) 관세사무소
대표관세사 고장주
Tel) 031-986-7190
E-mail) sales@npucus.com
[NPU관세사무소 프로모션 페이지] https://www.tradenpu.com/npu_cus/
[무역비지니스 인텔리전스 서비스 | TradeNPU] https://www.tradenpu.com
[파이썬 실용 예제. 무역과 공공데이터] https://pdatinmylife.tistory.com
Certified Customs Broker JangJu Goh
Executive Customs Broker @ NPU Customs Consulting
CEO @ JG TradePlus
sales@npucus.com
Trade Compliance / Customs clearance management at foreign company
Working experience of Air export freight forwarding
Data Visualization / Independent development of business automation application – copyright of JGPO_Manager, JG Data Center, AutoCC and etc.
B2B consignment & direct export/import, B2C Overseas Buying Office consulting
Alibaba.com B2B trade / taobao B2C trade / Amazon.com global selling etc. Online trade regulation consulting.
Import license / Quarantine
English communication available
[TradeNPU for partnership proposal - JGTP] https://www.tradenpu.com/jgtp/
'파이썬(Python) > 코로나와 보건용 마스크 수출입 실적 변동' 카테고리의 다른 글
[무역 | Phase3] 보건용 마스크 수출입 동향 - Visualization / matplotlib (0) | 2020.06.15 |
---|---|
[무역 | Phase2] 보건용 마스크 수출입 동향 - Python pandas 기본 (3부) (0) | 2020.06.15 |
[무역 | Phase2] 보건용 마스크 수출입 동향 - Python pandas 기본 (2부) (0) | 2020.06.15 |
[무역 | Phase1] 보건용 마스크 수출입 동향 - 공공데이터포털 데이터수집 (2부) (0) | 2020.06.15 |
[무역 | Phase1] 보건용 마스크 수출입 동향 - 공공데이터포털 데이터수집 (1부) (0) | 2020.06.13 |