두개 이상의 DataFrame을 합쳐 하나의 DataFrame으로 만든다.
pd.concat(objs, [, key=리스트], axis=0, join='outer')
- 조인(join)
- 여러 데이터프레임에 흩어져 있는 정보 중 필요한 정보만 모아서 결합하기 위한 것.
- 두개 이상의 데이터프레임을 특정 컬럼(열)의 값이 같은 행 끼리 수평 결합하는 것.
- Inner Join, Left Outer Join, Right Outer Join, Full Outer Join
# 합쳐보기
pd.concat([s_2016, s_2017, s_2018]) # 수직으로 쭉 붙여준다.
# axis의 기본값은 0이다. index
# 인덱스를 처리하는 방법 두 가지.
# 1. 원본의 index를 무시하는 방법.
pd.concat([s_2016, s_2017, s_2018], ignore_index=True)
# 2. keys를 이용해서 멀티 index로 index를 만든다.
df = pd.concat([s_2016, s_2017, s_2018], keys=['2016', '2017', '2018'])
df
df.loc['2016', 0]
df.loc['2016']
# concat을 이용한 join (수평 결합)
pd.concat([s_2017, s_info], axis=1) # 기본값이 풀아우터 조인.
# 기준은 인덱스가 같은 애들끼리 붙인 거야.
# 그래서 붙이기 전에 인덱스를 맞춰줘야 한다.
pd.concat([s_2017.set_index('Symbol'), s_info.set_index('Symbol')], axis=1)
# 심볼이 같은 것끼리 조인(풀아우터 조인)
# 조인을 이너로
# 그래서 붙이기 전에 인덱스를 맞춰줘야 한다.
pd.concat([s_2017.set_index('Symbol'), s_info.set_index('Symbol')], axis=1, join='inner')
# info를 먼저 나오게 하기
pd.concat([s_info.set_index('Symbol'), s_2017.set_index('Symbol')], axis=1, join='inner')
# 순서를 바꿔주면 됩니다.
df = pd.concat([s_2016, s_2017, s_2018], ignore_index=True)
df = df.set_index('Symbol')
# df = pd.concat([s_info.set_index('Symbol'),df], axis=1)
# df2 = pd.concat([s_info.set_index('Symbol'),df], axis=1)
# 한 쪽 DataFrame에 동일한 index 이름이 있는 경우, concat으로 join할 수 없다.
# join은 가능.
df2 = df.join(s_info.set_index('Symbol'))
df2
DataFrame 객체.join(oters, how='left', lsuffix='', rsuffix='')
df_A.join(df_b)
df_A.join([df_b, df_c, df_d])
매개변수
lsuffix, rsuffix
how : 조인 방식.
# concat은 동일한 컬럼이 있어도 상관없다
# 얘는 에러난다. 동일한 컬럼이 하나라도 있으면 에러가 발생한다.
# 그래서 lsuffix, rsuffix가 있다.
# ex lsuffix='_a', rsuffix='_b'
# share_a, share_b
# s_info.join(s_2017) # 에러 발생.
# 같은 컬럼이 있어서 에러가 발생한다.
s_info.join(s_2017, lsuffix='_info', rsuffix='_2017') # 이렇게 lsuffix, rsuffix 이용
s_info2 = s_info.set_index('Symbol')
s_2017_2 = s_2017.set_index('Symbol')
s_info2.join(s_2017_2) # 디폴트가 레프트 조인이다.
# 이너 조인으로 조인하기
s_info2.join(s_2017_2, how='inner') # how로 조인 방식 변경 가능
# 세 개 이상 조인하기
# s_2016.join([s_2017, s_2018]) # 에러 발생
# 같은 컬럼이 있어서 에러가 발생한다.
s_2016_2 = s_2016.copy()
s_2017_2 = s_2017.copy()
s_2018_2 = s_2018.copy()
# 컬럼 이름에 이름 붙여주기
s_2016_2 = s_2016_2.add_suffix('_2016')
s_2017_2 = s_2017_2.add_suffix('_2017')
s_2018_2 = s_2018_2.add_suffix('_2018')
# s_2016.join([s_2017, s_2018], lsuffix='_2016', rsuffix='_2017') # 에러 발생
# 세 개 이상이라서 에러가 발생한다.
# 세 개 이상일 때 동일한 이름이 있으면 lsuffix, rsuffix를 사용할 수 없다.
s_2016_2.join([s_2017_2, s_2018_2]) # 컬럼 이름이 다르기 때문에 에러가 발생하지 않는다.
DataFrame.merge(합칠 dataframe, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False)
df_a.merge(df_b)
# 같은 이름이 여러 개일 때 하나만 지정해서 쓰고싶을 때 on
# 오른쪽 컬럼 왼쪽 컬럼 고르는 거
# 왼쪽 인덱스 오른쪽 인덱스 트루 폴스 지정.
# 머지 사용
s_info.merge(s_2016) # 알아서 심볼이 같은 애들끼리 합쳐준다.
# 기본값이 이너조인이다.
# 나는 레프트 아우터 조인할거라면?
s_info.merge(s_2016, how='left')
# 공통된 컬럼이 없다면 에러가 발생한다.
# left_on, right_on
s_info.merge(s_2016_2, left_on='Symbol', right_on='Symbol_2016')
# 사용해서 이름이 다르더라도 공통된 컬럼을 지정해 준다.
s_2016_3 = s_2016.set_index('Symbol')
s_2016_3
# 인덱스를 이용해서 머지하기
s_info.merge(s_2016_3, left_on='Symbol', right_index=True) # 오른쪽 인덱스를 사용해~
# 조인은 맘대로 지정할 수가 없다.
# 인덱스로 빼서 사용해야 한다.
s_2017.merge(s_2016) # 기본값 이너조인
# 컬럼 4개가 전부 다 같음.
# on을 이용하기
s_2017.merge(s_2016, on='Symbol')
# suffixes 붙여주기
s_2017.merge(s_2016, on='Symbol', suffixes=['_2017', '_2016'])
조인하는데 왜 반환값을 안적어주나요?
조인 리턴타입으로 데이터프레임이 나오는데