데이터 병합
다음은 일정기간의 코스피와 원-달러의 종가 데이터를 호출한 것입니다(yahoo finantical 자료 호출 참조).
import numpy as np import pandas as pd import yfinance as yf
st=pd.Timestamp(2024, 9, 1) et=pd.Timestamp(2024, 9,22) d=yf.download("^KS11", start=st, end=et)["Close"] d.head(2)
Date 2024-09-02 2681.000000 2024-09-03 2664.629883 Name: Close, dtype: float64
dw=yf.download("KRW=X", st, et) dwC=dw.Close dwC.head(2)
Date 2024-09-02 1336.579956 2024-09-03 1337.550049 Name: Close, dtype: float64
데이터 d와 dw의 합치기 위해 다양한 방법을 적용할 수 있습니다.
union(), intersection() 메서드를 사용하여 각 자료의 index를 조정하여 pd.concat() 등의 함수를 사용할 수 있습니다.
- union: 인덱스 모두를 결합하여 나타냅니다. 즉, 합집합입니다.
- intersection: 두 인덱스들의 공통부분을 추출합니다. 즉, 교집합입니다.
idx1=d.index; idx1
DatetimeIndex(['2024-09-02', '2024-09-03', '2024-09-04', '2024-09-05', '2024-09-06', '2024-09-09', '2024-09-10', '2024-09-11', '2024-09-12', '2024-09-13', '2024-09-19', '2024-09-20'], dtype='datetime64[ns]', name='Date', freq=None)
idx2=dw.index;idx2
DatetimeIndex(['2024-09-02', '2024-09-03', '2024-09-04', '2024-09-05', '2024-09-06', '2024-09-09', '2024-09-10', '2024-09-11', '2024-09-12', '2024-09-13', '2024-09-16', '2024-09-17', '2024-09-18', '2024-09-19', '2024-09-20'], dtype='datetime64[ns]', name='Date', freq=None)
idx1=d.index idx2=dw.index
idx_u=idx1.union(idx2) all(idx_u == idx2)
True
idx_i=idx1.intersection(idx2) all(idx_i==idx1)
True
위에서 생성한 idx_i를 적용하여 서로 공통되는 부분을 결합합니다. 결합은 pd.concat([df1,df2,…], axis=0, join="outer" …)
함수를 사용합니다.
pd.concat([d, dwC[idx_i]], axis=1).head(2)
Close | Close | |
---|---|---|
Date | ||
2024-09-02 | 2681.000000 | 1336.579956 |
2024-09-03 | 2664.629883 | 1337.550049 |
위에서 사용한 pd.concat() 함수는 두 개이상의 다른 데이터들을 결합하기 위해 사용합니다.
- 인수중 axis로 결합방향을 지정합니다. 0인 경우 종방향, 1인 경우 횡방향으로 결합합니다. 기본값은 0
- join은 결합방식을 결정합니다. 결합할 객체들의 행 또는 열의 수가 다를 경우 join="outer"은 모두 결합합니다. 그러므로 대응되는 데이터가 없을 경우 NaN로 표현됩니다. 반면에 join="inner"는 공통되는 부분만을 결합합니다.
직전의 결과는 다음과 같습니다.
pd.concat([d, dwC], axis=1, join="inner")
Close | Close | |
---|---|---|
Date | ||
2024-09-02 | 2681.000000 | 1336.579956 |
2024-09-03 | 2664.629883 | 1337.550049 |
⋮ | ⋮ | ⋮ |
pd.concat([d, dwC], axis=1)
Close | Close | |
---|---|---|
Date | ||
2024-09-02 | 2681.000000 | 1336.579956 |
2024-09-03 | 2664.629883 | 1337.550049 |
2024-09-04 | 2580.800049 | 1340.410034 |
⋮ | ⋮ | ⋮ |
2024-09-16 | NaN | 1329.510010 |
2024-09-17 | NaN | 1319.109985 |
2024-09-18 | NaN | 1322.930054 |
⋮ | ⋮ | ⋮ |
aixs=0(기본값)을 적용한 경우 종방향으로 결합합니다.
pd.concat([d,dwC])
Date 2024-09-02 2681.000000 2024-09-03 2664.629883 ⋮ 2024-09-20 2593.370117 2024-09-02 1336.579956 2024-09-03 1337.550049 ⋮ 2024-09-19 1322.260010 2024-09-20 1327.609985 Name: Close, dtype: float64
댓글
댓글 쓰기