Pandas 함수 - (pd.merge(DataFrame, DataFrame, how=(inner, outer, left of right), on=(어떤 열을 기준으로 합 칠지)
- 한 데이터 프레임에는 있지만 다른 데이터 프레임에는 없는 열이 있을 수 있고 혹은 한 데이터 프레임에 없는 행이 있을 수 있는 경우에는 데이터 프레임을 merge 시켜야 한다.
merge 함수 사용 시 중요한 점
1. 'on' = 열은 각 행마다 고유한 기본 식별자여야 한다.(열의 값이 각 행마다 모두 다르게 설정되어야 한다는 것입니다.)
2. 'how' = 열에서 테이블 어떻게 merge 할 지 결정해야 한다.
3. 즉, how = 어떤 방법으로 merge할지 on = 어떤 열을 기준으로 merge할 지 결정하는 것이다.
Inner : 두 테이블에서 일치하는 레코드 집합이 된다.
- 다이어그램에서 보면 교집합에 해당된다.
registrations = pd.DataFrame({'reg_id':[1,2,3,4],'name':['Andrew','Bobo','Claire','David']})
logins = pd.DataFrame({'log_id':[1,2,3,4],'name':['Xavier','Andrew','Yolanda','Bobo']})
pd.merge(registrations, logins, how='inner', on='name')
- 해당 코드는 등록과 로그인을 한 사람을 찾기 위해 Inner를 사용한다.
Left and Right : 두 테이블에서 한 쪽의 레코드를 기준으로한 집합이 된다.
왼쪽 또는 오른쪽에 있는 열에 값은 모두 출력 된다.
- 겹치는 값이 있는 열: name 열처럼 왼쪽 또는 오른쪽에 존재하고, 값이 일치하는 경우에는 해당 값이 기준?이 되어 행이 병합됩니다.
- 오른쪽 데이터프레임에만 있는 열: 오른쪽 데이터프레임에만 존재하고 왼쪽 데이터프레임에는 없는 열(예: log_id)은 왼쪽 데이터프레임에 일치하는 값이 없으면 결과에 포함되지 않습니다.(NaN으로 표현)
pd.merge(left=registrations, right=logins, how='left', on='name')
pd.merge(left=registrations, right=logins, how='right')
# on 옵션은 주요 옵션이 하나만 있을 경우 pandas는 알아서 판단하여 출력해준다.
- 위의 코드는 왼쪽의 데이터 값 또는 오른 쪽의 데이터 값들을 기준으로 출력해주는 코드이다.
Outer : 두 테이블의 레코드를 기준으로한 집합이다.
다이어 그램에서의 합집합을 생각하면 된다.
pd.merge(registrations, logins, how='outer', on='name')
column이 서로 다른 상태에서 merge하는 방법
# 방법 1
registrations = registrations.set_index('name')
# 인덱스를 registrations의 name으로 바꾼다. 그럼 두 개의 데이터 테이블의 column이 달라졌다.
pd.merge(registrations, logins, left_index=True, right_on='name', how='inner')
# 이렇게 left_index=True와 right_on='name'을 매개변수로 정해주면 결국 name을 기준으로 merge를
# 하는 것이다.
# 방법 2
registrations.columns = ['reg_name', 'reg_id']
# column명에 동일한 이름이 없게 만들었다.
pd.merge(registrations, logins, how='inner', left_on='reg_name', right_on='name')
# 이럴 경우는 left_on, right_on 매개변수를 사용하여 합칠 기준을 위의 코드 처럼 정해주면 된다.
registrations.columns = ['name', 'id']
logins.columns = ['id', 'name']
# 두 개의 데이터 프레임 column명을 같게 만들었다.
pd.merge(registrations, logins, how='inner', on='name')
# 이 경우는 아래 그림과 같이 합쳐졌을 떄 pandas가 자동으로 이름을 정해서 출력해준다.
pd.merge(registrations, logins, how='inner', on='name', suffixes=('_reg', '_log'))
# 아니면 사용자가 suffixes 매개변수를 사용하여 이름을 바꿔주면 된다.
pd.merge() 함수는 다양한 매개변수를 제공하여 여러 가지 병합 조건을 처리할 수 있게 설계되어 있다.
이를 통해 데이터프레임의 구조가 다르더라도 공통된 값이 있다면 병합할 수 있다.
728x90
'Data Analyst > ML' 카테고리의 다른 글
ML - PANDAS(Condition-Filtering) (0) | 2024.08.29 |
---|---|
ML - PANDAS(DATA FRAME) - 2 (1) | 2024.08.28 |
ML - PANDAS(Data Frame) - 1 (0) | 2024.08.28 |
ML - Pandas(Series) (1) | 2024.08.27 |
ML - Pandas(Combining DataFrames) - 1 (0) | 2024.08.22 |