본문 바로가기
데이터시각화

데이터프레임 병합(Merge) - Pandas

by 느리게 걷는 즐거움 2024. 3. 19.
728x90
반응형

병합은 서로다른 데이터프레임 객체에 동일하게 존재하는 값을 통해 양쪽 데이터를 연관 지어 하나의 데이터프레임으로 모델링할 수 있는 유용한 방법입니다.

데이터 병합(merge)

데이터결합을 연습하기 위한 데이터프레임을 만들기 위해 'FinanceDataReader'라이브러리를 사용합니다. 한국/미국 주식의 가격 등 다양한 금융데이터를 수집할 수 있는 라이브러리입니다. 만들어주신 'FinanceData.Kr'[1]에 감사드립니다. 삼성전자의 2023년 주가정보를 가져와서 병합하기위해서 2개의 데이터프레임으로 나누어 주겠습니다.

import FinanceDataReader as fdr
samsung_df = fdr.DataReader('005930', '2023')
samsung_df.head(10)

 

우선 2023년 삼성전자의 주가정보를 가져오기 위해서 삼성전자의 ticker와 년도 정보를 이용합니다. 전달받은 데이터프레임에는 삼성전자의 'Open', 'High', 'Volume' 등의 주가 정보가 있습니다.

병합을 연습하기 위해서 이 데이터프레임을 2개로 나눕니다. 기존 데이터프레임의 'Volume'정보와 삼성전자의 'Ticker' 정보를 갖는 'samsung_volume'과 기존의 데이터에 삼성전자의 'Ticker'정보를 추가한 'samsung_df' 데이터프레임을 아래와 같이 생성합니다. 

그리고 'Volume'열은 병합으로 다시 추가할 예정이나 pop()명령으로 'Volume'열을 'samsung_df' 데이터프레임에서는 삭제합니다. 'samsung_df' 데이터프레임에는 'Volume'열이 없는 것을 확인할 수 있습니다.

samsung_volume = pd.DataFrame ({'Ticker': '005930', 'Volume' : samsung_df['Volume']})
samsung_df['Ticker'] = '005930'
samsung_df.pop('Volume')
display(samsung_df.head(2))
display(samsung_volume.head(2))

기존의 'samsung_df' 데이터프레임에는 'Volume'정보가 사라졌으며 두 개의 데이터프레임은 'Ticker'열을 갖습니다. 이 'Ticker'열을 이용하여 2개의 데이터프레임을 병합합니다. 병합을 위해 연결할 열은 'on'을 통해 전달합니다.

samsung_merged = samsung_df.merge(samsung_volume, on='Ticker')
display(samsung_merged.head(2))

병합이 완료된 samsung_merged 데이터프레임에는 2개의 데이터프레임에 공통으로 존재하는 'Ticker'열을 이용하여 'Volume'정보가 'samsung_df' 데이터프레임에 병합되었습니다.

728x90
반응형