본문 바로가기

코딩TIPS

[Python] DataFrame concat 으로 합치기(병합)

반응형

복수개의 DataFrame을 concat을 이용해서 합쳐보도록 하겠습니다.

 

데이터 수집

삼성전자 2022-10-01~10-12, 애플 2022-10-08~10-16 데이터를 수집했습니다.

일부러 일부 날짜만 겹치게 데이터를 수집했습니다.

import pandas as pd
import FinanceDataReader as fdr
from IPython.display import display

code1='005930'
startdate1='2022-10-01'
enddate1='2022-10-12'
df1=fdr.DataReader(code1,startdate1,enddate1)

code2='AAPL'
startdate2='2022-10-08'
enddate2='2022-10-16'
df2=fdr.DataReader(code2,startdate2,enddate2)

종가 정보인 Close Column만 따로 저장하겠습니다.

df3=df1[['Close']]
df4=df2[['Close']]
# Close Column을 회사명으로 변경
df5=df1[['Close']].rename(columns={'Close':'삼성전자'})
df6=df2[['Close']].rename(columns={'Close':'애플'})


display(df3.head())
display(df4.head())
display(df5.head())
display(df6.head())

df3, df4의 결과의 Column명은 Close입니다.

df5, df6은 column명을 회사명으로 바꿨습니다.

 

 

반응형

 

concat 사용

Pandas의 API Reference의 내용입니다.

이중에서 3가지 axis, join, ignore_index만 변경후 결과를 확인해보겠습니다.

 

우선 default 상태에서의 결과 : axis=0, join='outer', ignore_index=False 입니다.

df3과 df4는 위아래로 합쳐졌는데, Column명이 동일해서 같은 Close Column으로 되었습니다.

pd.concat([df3,df4])

df5와 df6은 axis=0 위아래로 합쳐져야 하는데 column명이 달라 대각선으로 되었습니다.

pd.concat([df5,df6])

 

axis=1로 변경해보겠습니다.

axis=1 이면 옆쪽방향 column으로 합쳐지는데 기준은 index가 되겠습니다.

index가 일치하는 부분은 df3, df4의 데이터가 다있고, 나머지는 개별 데이터가 있습니다.

pd.concat([df3,df4], axis=1)

df5, df6은 axis=0하고 결과가 동일합니다.

index와 column명이 다 일치하는 데이터가 없기 때문이죠.

pd.concat([df5,df6], axis=1)

 

이번에는 axis=1에 join='inner'로 변경해보겠습니다.

df3과 df4의 index 중 일치하는 부분만 남게 됩니다.

inner와 outer의 비교해 보면 쉽게 알수 있습니다.

pd.concat([df3,df4], axis=1, join='inner')

 

마지막으로 ignore_index 를 보겠습니다.

index 정보가 초기화 된것을 알수있습니다.

pd.concat([df5,df6], ignore_index=True)

 

이상으로 concat에 대해서 알아봤습니다.

 

 

추가로 FinanceDataReader를 이용한 주가 가져오기에 관심있으신 분은 아래를 참고부탁드립니다.

https://yenpa.tistory.com/19

 

[FinanceDataReader] 설치 및 주식 주가 정보 가져오기(코스피, 코스닥)

국내 주식 정보를 가져와 보겠습니다. 1. FinanceDataReader 설치 2. 종목 정보 가져오기 3. 주가 정보 가져오기 1. FinanceDataReader 설치 명령프롬프트에서 아래의 명령어로 설치 가능합니다. anaconda의 경

yenpa.tistory.com

 

 

반응형