-
[Pandas] 판다스 merge 함수로 파이썬 데이터프레임 병합하는 방법Python/Pandas, Numpy 2023. 5. 17. 10:45반응형
판다스 merge 함수로 데이터프레임 병합하는 방법
파이썬(Python)에서 표 형태의 데이터는 판다스 데이터프레임(Pandas DataFrame)이라는 객체를 이용해서 나타냅니다. 이를 이용하면 표 하나는 물론, 둘 이상의 표를 같은 기준을 중심으로 묶어서 확인해볼 수 있습니다.
이번에는 판다스에서 제공하는 병합(merge) 기능을 이용해, 두 데이터프레임을 합치고 이를 시각화하는 작업을 해 보겠습니다. 해당 분석에는 Pandas와 플로틀리(plotly) 패키지가 사용되었으며, 아래 두 파일을 입력했으니 참고해 주세요.
BestLoanList.xlsx0.08MBBestSellerList.xlsx0.09MB# 패키지 불러오기 import pandas as pd import plotly.express as px # 데이터 불러오기 loan = pd.read_excel('./data/BestLoanList.xlsx', thousands = ',') # thousands: 숫자 구분자를 제거합니다 sell = pd.read_excel('./data/BestSellerList.xlsx', thousands = ',')
loan.head()
월 순위 서명 저자 출판사 출판년도 권 ISBN ISBN부가기호 KDC 대출건수 0 1월 1 달러구트 꿈 백화점.이미예 장편소설 지은이: 이미예 팩토리나인 2020 NaN 9791165341909 3810.0 813.7 3433 1 1월 2 완전한 행복 :정유정 장편소설 지은이: 정유정 은행나무 2021 NaN 9791167370280 3810.0 813.7 2903 2 1월 3 아몬드손원평 장편소설 손원평 창비 2017 NaN 9788936434267 3810.0 813.7 2769 3 1월 4 불편한 편의점 :김호연 장편소설 지은이: 김호연 나무옆의자 2021 NaN 9791161571188 3810.0 813.7 2713 4 1월 5 달러구트 꿈 백화점.이미예 장편소설 지은이: 이미예 팩토리나인 2020 2.0 9791165343729 3810.0 813.7 2605 sell.head()
월 순위 도서명 저자 출판사 출판 일자 정가 적립포인트 대분야 ISBN 0 2021년 1 달러구트 꿈 백화점(레인보우 에디션) 이미예 팩토리나인 20200708 13800 690 판타지소설 9791165341909 1 2021년 2 주린이가 가장 알고 싶은 최다질문 TOP 77(교보 단독 리커버) 염승환 메이트북스 20210726 18000 900 주식투자 9791160023459 2 2021년 3 미드나잇 라이브러리(평행우주 에디션) 매트 헤이그 인플루엔셜 20210428 15800 790 영미소설일반 9791191056556 3 2021년 4 조국의 시간 조국 한길사 20210531 17000 850 정치가 9788935668663 4 2021년 5 소크라테스 익스프레스 에릭 와이너 어크로스 20210428 18000 900 고대/그리스철학 9791190030922 이번에 사용할 데이터는 도서관 대출(loan) 및 서점 판매(sell)순위 데이터입니다. 전자의 데이터는 월별 대출순위 및 대출건수를 알 수 있으며, 후자의 데이터는 월별(2021년은 월 표기가 없으며, 2022년만 있음) 판매순위 및 가격, 대분야 등을 알 수 있습니다. 이렇게 서로 독립적인 데이터가 있다면, 이걸 합쳐서 각각의 관계 또는 새로운 분석을 확인해볼 수 있는습니다. 국내에 유통되는 모든 책은 고유한 ISBN을 가지고 있기 때문에, 이를 기준으로 병합을 해 보겠습니다.
merge1 = pd.merge(loan, sell, left_on='ISBN', right_on='ISBN')
merge1.head()
월_x 순위_x 서명 저자_x 출판사_x 출판년도 권 ISBN ISBN부가기호 KDC 대출건수 월_y 순위_y 도서명 저자_y 출판사_y 출판 일자 정가 적립포인트 대분야 0 1월 1 달러구트 꿈 백화점.이미예 장편소설 지은이: 이미예 팩토리나인 2020 NaN 9791165341909 3810.0 813.7 3433 2021년 1 달러구트 꿈 백화점(레인보우 에디션) 이미예 팩토리나인 20200708 13800 690 판타지소설 1 1월 1 달러구트 꿈 백화점.이미예 장편소설 지은이: 이미예 팩토리나인 2020 NaN 9791165341909 3810.0 813.7 3433 1월 17 달러구트 꿈 백화점(레인보우 에디션) 이미예 팩토리나인 20200708 13800 690 판타지소설 2 1월 1 달러구트 꿈 백화점.이미예 장편소설 지은이: 이미예 팩토리나인 2020 NaN 9791165341909 3810.0 813.7 3433 2월 27 달러구트 꿈 백화점(레인보우 에디션) 이미예 팩토리나인 20200708 13800 690 판타지소설 3 1월 1 달러구트 꿈 백화점.이미예 장편소설 지은이: 이미예 팩토리나인 2020 NaN 9791165341909 3810.0 813.7 3433 3월 31 달러구트 꿈 백화점(레인보우 에디션) 이미예 팩토리나인 20200708 13800 690 판타지소설 4 1월 1 달러구트 꿈 백화점.이미예 장편소설 지은이: 이미예 팩토리나인 2020 NaN 9791165341909 3810.0 813.7 3433 4월 53 달러구트 꿈 백화점(레인보우 에디션) 이미예 팩토리나인 20200708 13800 690 판타지소설 데이터프레임 병합은
pd.merge
함수를 이용해 수행합니다. 해당 함수의 옵션은 아래 내용을 참고해 주시기 바랍니다.left_on, right_on
매개변수(parameter)에 각각의 기준 열(column) 이름을 지정해주면 손쉽게 병합이 가능하지요. 해당 병합은 SQL join 등에 익숙하다면 간단하게 원리를 알아챌 수 있습니다.pd.merge(데이터프레임1, 데이터프레임2, left_on='데이터프레임1의 기준 column', left_on='데이터프레임2의 기준 column', how='병합 옵션')
참고로, merge는 SQL join 등과 같이 어떤 데이터프레임을 기준으로 병합할 것인지를 조절할 수 있습니다. 이에 대한 예시는 아래 사진을 참고해 주세요.
이렇게 만들어낸 병합 데이터프레임인
merge1
을 사용해서는 기존 데이터프레임 각각이 보여줄 수 없는 특성을 보여줍니다. 예를 들어, 도서 분야별 대출건수의 관계를 확인해서 어떤 분야의 책을 많이 빌리는지 알고 싶다면, 아래와 같이 시각화해볼 수 있습니다. 판타지소설이 전반적으로 대출량이 많은 편이네요.fig = px.box(merge1, '대분야', '대출건수', color='월_x', width=720, height=480, labels={'대분야': '분야', '대출건수': '대출건수 (권)', '월_x': '기준월'}, title='도서 분야별 대출 현황' ) fig.show()
티스토리에서는 동적 그래프(interactive plot)의 표기가 되지 않는 관계로, 출력된 그래프를 캡쳐해서 올렸습니다. 만약 해당 코드를 직접 실행해 보신다면, 월별로 데이터를 선택해 볼 수 있으니 참고해 주시기 바랍니다.
반응형'Python > Pandas, Numpy' 카테고리의 다른 글
[Pandas] 판다스 데이터프레임을 읽을 때, thousands 패러미터로 숫자 구분자 콤마를 빼보자 (0) 2023.05.18 [ydata-profiling] 파이썬에서 ydata-profiling으로 간편하게 판다스 데이터 분석과 시각화 (0) 2023.05.11 [Pandas] 파이썬 Pandas로 엑셀 파일 읽기와 쓰기 (0) 2023.05.04