데이터프레임 병합 : pd.merge()
merge() 함수는 두 데이터프레임을 병합하는 기능을 수행한다는 점에서 pd.concat()함수와 동일하다.
concat과의 차이점으로 merge는 두 데이터프레임을 각 데이터에 존재하는 고유값(key)을 기준으로 병합할때 사용한다.
Default : pd.merge(df_left, df_right, how='inner', on=None)
두 개의 데이터 프레임을 생성해준다.
df1 = pd.DataFrame({'data1': range(5),
'key': list('abcde')})
df2 = pd.DataFrame({'data2': range(3),
'key': list('efg')})
print(df1, '\n\n', df2)
더보기
[Output]
data1 | key | |
0 | 0 | a |
1 | 1 | b |
2 | 2 | c |
3 | 3 | d |
4 | 4 | e |
data2 | key | |
0 | 0 | e |
1 | 1 | f |
2 | 2 | g |
두 데이터 프레임을 아무 옵션을 주지않고 merge를 할 경우 아래와 같다.
result = pd.merge(df1, df2)
print(result)
더보기
data1 | key | data2 | |
0 | 4 | e | 0 |
아무 옵션을 적용하지 않으면, on=None이므로 두 데이터의 공통 열 이름(key)을 기준으로 inner(교집합) 조인을 하게 된다.
merge()함수의 옵션
1. merge(how='outer')
result = pd.merge(df1, df2, on='key', how='outer')
print(result)
더보기
data1 | key | data2 | |
0 | 0.0 | a | NaN |
1 | 1.0 | b | NaN |
2 | 2.0 | c | NaN |
3 | 3.0 | d | NaN |
4 | 4.0 | e | 0.0 |
5 | NaN | f | 1.0 |
6 | NaN | g | 2.0 |
outer(합집합) join을 수행하면 공통되지 않는 값들에 대해 NaN 값을 반환한다.
2. merge(how='left')
result = pd.merge(df1, df2, on='key', how='left')
result
더보기
data1 | key | data2 | |
0 | 0 | a | NaN |
1 | 1 | b | NaN |
2 | 2 | c | NaN |
3 | 3 | d | NaN |
4 | 4 | e | 0.0 |
left join을 수행하면 df1를 기준으로 join을 수행하여 df2에 해당 key 값이 없는 경우NaN 값을 반환한다.
3. merge(how='right')
result = pd.merge(df1, df2, on='key', how='right')
result
더보기
data1 | key | data2 | |
0 | 4.0 | e | 0 |
1 | NaN | f | 1 |
2 | NaN | g | 2 |
right join을 수행하면 left join과 반대로 df1에 해당 key 값이 없는 경우 NaN값을 반환한다.
데이터프레임 결합 : join()
join함수는 merge()함수를 기반으로 만들어졌기 때문에 기본 작동방식이 비슷하지만 행 인덱스를 기준으로 데이터프레임을 병합한다는 점에서 차이가 있다.
Default : Dataframe.join(Dataframe2. how='left')
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])
더보기
data1 | lkey | |
0 | 0 | a |
1 | 1 | b |
2 | 2 | c |
3 | 3 | a |
4 | 4 | b |
5 | 5 | c |
6 | 6 | a |
data2 | rkey | |
2 | 0 | a |
3 | 1 | b |
4 | 2 | d |
result = df1.join(df2)
result
더보기
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 |
default값이 how=’left’, 이므로 df1의 행 인덱스(lkey)를 기준으로 결합된다.
'DL(Deep-Learning) > Python 기초' 카테고리의 다른 글
Google Colab 런타임 연결 유지 & 출력 삭제 (0) | 2022.01.26 |
---|---|
[Python] 파일 이름 변경하기 (0) | 2022.01.26 |
DataFrame 합치기1 (concat, merge, join) (0) | 2022.01.26 |
[Python] Raw String이란? (0) | 2022.01.26 |
[Python] 파일과 디렉토리 경로 설정하기 (0) | 2022.01.26 |