Search

데이터 합치기

Concat 과 Merge, Join 등의 방식이 있다.

1. merge : combining data on common columns or indices

두 데이터프레임의 고유값(key)를 기준으로 병합한다.
고유값은 변수 또는 인덱스가 될 수 있다.
같은 이름의 열이 있으면 on 파라미터를 설정하지 않아도 자동으로 그 열을 기준으로 조인된다.
how=’inner’ 가 기본값이다.
df1 = pd.DataFrame({ 'data1':range(6), 'key':list('aabbcc') }) df2 = pd.DataFrame({ 'data2':range(3), 'key':list('cad') }) print(df1, '\n\n', df2) data1 key 0 0 a 1 1 a 2 2 b 3 3 b 4 4 c 5 5 c data2 key 0 0 c 1 1 a 2 2 d
Python
복사
how=’inner’ : default
공통열을 기준으로 이너조인 한다.
pd.merge(df1, df2) Out[5]: data1 key data2 0 0 a 1 1 1 a 1 2 4 c 0 3 5 c 0
Python
복사
how=’outer’
아우터조인한다.
# how='outer' pd.merge(df1, df2, on='key', how='outer') # on : 조인키 지정 Out[6]: data1 key data2 0 0.0 a 1.0 1 1.0 a 1.0 2 2.0 b NaN 3 3.0 b NaN 4 4.0 c 0.0 5 5.0 c 0.0 6 NaN d 2.0
Python
복사
how=’left’
레프트 아우터 조인한다.
# how='left' : 레프트 아우터 조인 pd.merge(df1,df2, on='key', how='left') Out[7]: data1 key data2 0 0 a 1.0 1 1 a 1.0 2 2 b NaN 3 3 b NaN 4 4 c 0.0 5 5 c 0.0
Python
복사
how=’right’
롸이트 아우터 조인한다.
# how='right' : 롸이트 아우터 조인 pd.merge(df1,df2, on='key', how='right') Out[8]: data1 key data2 0 4.0 c 0 1 5.0 c 0 2 0.0 a 1 3 1.0 a 1 4 NaN d 2
Python
복사
left_on & right_on : 왼쪽 df의 키값과 오른쪽 df의 키값이 같은 것들끼리 m*n 조합으로 데이터프레임 병합이 가능함
df1 = pd.DataFrame({ 'data1' : range(7), 'lkey' : list('abcabca') }) df2 = pd.DataFrame({ 'data2' : range(3), 'rkey' : list('abd') }) pd.merge(df1, df2, left_on='lkey', right_on='rkey') # how='inner' Out[9]: data1 lkey data2 rkey 0 0 a 0 a 1 3 a 0 a 2 6 a 0 a 3 1 b 1 b 4 4 b 1 b
Python
복사

2. concat : combining data across rows or columns

pd.concat([df1, df2], axis=1(또는 0), join=’outer’(또는 ‘inner) )
인덱스 값을 기준으로 두 데이터프레임을 행/열 방향으로 연결시킨다.
axis = 1 : 열 방향으로 연결한다.
axis = 0(default) : 행 방향으로 연결한다.
join = ‘outer’ (default) : 모든 데이터들을 연결한다.
join = ‘inner’ : 동일한 인덱스 값에 대해 연결한다.

3. join : combining data on a column or index

merge() 함수를 기반으로 만들어짐. 작동방식은 비슷하지만 행 인덱스를 기준으로 병합함.
how=’left’ : default
df1 = pd.DataFrame({ 'data1' : range(7), 'lkey' : list('abcabca'), }, index = range(7)) df2 = pd.DataFrame({ 'data2' : range(3), 'rkey' : list('abd') }, index = [2, 3, 4]) df1.join(df2) # how='left' : default Out[10]: data1 lkey data2 rkey 0 0 a NaN NaN 1 1 b NaN NaN 2 2 c 0.0 a 3 3 a 1.0 b 4 4 b 2.0 d 5 5 c NaN NaN 6 6 a NaN NaN
Python
복사