이번 글은 코드잇 강의를 수강하면서 배운 내용을 주로 하여 정리되어 있습니다. (코드잇 스프린트 데이터 애널리스트 트랙 1기 훈련생)
데이터 합치기
같은 형식의 데이터 합치기 : concat()
pandas에서 concat() 함수는 여러 데이터프레임(DataFrame)이나 시리즈(Series)를 하나로 합칠 때 사용됩니다.
concat() 함수를 사용하면 단순히 데이터프레임을 세로 또는 가로로 이어 붙일 수 있습니다.
concat() 함수의 주요 인자들
- objs : 합칠 객체들(리스트나 딕셔너리 형태로 전달). 데이터프레임이나 시리즈가 될 수 있습니다.
- axis : 결합할 축을 지정. 0은 세로(행을 따라 결합), 1은 가로(열을 따라 결합). 기본값은 0.
- join : 결합 방법을 지정. inner와 outer가 있으며, 기본값은 outer입니다.
- inner : 교집합. 공통된 행 또는 열만 결합합니다.
- outer : 합집합. 모든 행 또는 열을 결합합니다.
- ignore_index : True로 설정하면, 기존 인덱스를 무시하고 새로운 정수형 인덱스를 생성합니다. 기본값은 False입니다.
- keys : 각각의 객체에 키를 부여하여 계층적 인덱스를 생성할 때 사용됩니다.
- levels : keys와 함께 사용되며, 각 키가 어느 레벨에 속하는지를 지정합니다.
- names : keys와 함께 사용되며, 계층적 인덱스의 각 레벨에 이름을 부여합니다.
import pandas as pd
# 예시 데이터프레임 생성
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']})
df2 = pd.DataFrame({'A': ['A3', 'A4', 'A5'],
'B': ['B3', 'B4', 'B5']})
# concat()을 이용한 데이터 합치기
result = pd.concat([df1, df2])
# concat를 아무 옵션없이 하면 원래 인덱스 번호 그대로 데이터가 합쳐지기 때문에 원래 인덱스 번호를 가지고 있는 경우에 인덱스 번호가 이어지지 않음
# 인덱스 번호가 이어지도록 ignore_index 사용하여 인덱스 번호를 새로 부여하기
result = pd.concat([df1, df2], ignore_index=True)
# 가로로 데이터프레임 결합 (axis=1) 추가 (concat 함수의 기본적으로 위아래로 데이터를 합친다.)
result = pd.concat([df1, df2], axis=1)
조인 연산
조인 연산은 데이터프레임에 공통으로 들어있는 값을 기준(Key)으로 데이터를 결합하는 작업을 말합니다.
조인은 데이터 분석에서 매우 중요한 기능으로, 서로 다른 데이터셋을 결합하여 더 풍부한 정보를 얻을 수 있게 해줍니다.
pandas에서는 merge() 함수와 join() 메서드를 사용하여 조인 연산을 수행할 수 있습니다.
조인의 종류
- Inner Join (내부 조인)
- 설명: 두 데이터프레임에서 공통된 키를 가진 행만 결합합니다.
- 결과: 결과 데이터프레임은 교집합이 됩니다.
- 설정: how='inner'로 설정합니다 (기본값).
- Left Outer Join (왼쪽 외부 조인)
- 설명: 첫 번째(왼쪽) 데이터프레임의 모든 행을 기준으로 결합합니다.
- 결과: 왼쪽 데이터프레임에 있는 모든 행이 결과에 포함됩니다. 오른쪽 데이터프레임의 일치하지 않는 행은 NaN으로 표시됩니다.
- 설정: how='left'로 설정합니다.
- Right Outer Join (오른쪽 외부 조인)
- 설명: 두 번째(오른쪽) 데이터프레임의 모든 행을 기준으로 결합합니다.
- 결과: 오른쪽 데이터프레임에 있는 모든 행이 결과에 포함됩니다. 왼쪽 데이터프레임의 일치하지 않는 행은 NaN으로 표시됩니다.
- 설정: how='right'로 설정합니다.
- Full Outer Join (완전 외부 조인) :
- 설명: 두 데이터프레임의 모든 행을 결합합니다.
- 결과: 공통되지 않은 값은 NaN으로 표시됩니다.
- 설정: how='outer'로 설정합니다.
merge() 함수의 on 인자를 사용하여 기준이 되는 열을 지정하고, how 인자를 사용하여 조인 방식을 선택합니다.
컬럼 기준 데이터 합치기 : merge()
pandas의 merge 함수는 두 개의 데이터프레임을 특정 기준으로 병합하는 데 사용됩니다.
이 함수는 다양한 옵션을 통해 유연하게 병합할 수 있으며, 옵션에 대해서는 밑에서 설명하겠습니다.
merge 함수 사용법
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, suffixes=('_x', '_y'))
주요 매개변수
- left: 병합할 첫 번째 데이터프레임.
- right: 병합할 두 번째 데이터프레임.
- how: 병합 방법을 지정합니다. 기본값은 'inner'입니다.
- 'left': 왼쪽 데이터프레임의 모든 행과 일치하는 오른쪽 데이터프레임의 행을 결합.
- 'right': 오른쪽 데이터프레임의 모든 행과 일치하는 왼쪽 데이터프레임의 행을 결합.
- 'outer': 일치하는 모든 행을 포함.
- 'inner': 일치하는 행만 포함.
- on: 병합할 열의 이름을 지정합니다. 두 데이터프레임에 공통으로 존재하는 열이어야 합니다.
- left_on: 왼쪽 데이터프레임에서 병합할 키 열을 지정합니다.
- right_on: 오른쪽 데이터프레임에서 병합할 키 열을 지정합니다.
- left_index: True로 설정하면 왼쪽 데이터프레임의 인덱스를 병합 키로 사용합니다.
- right_index: True로 설정하면 오른쪽 데이터프레임의 인덱스를 병합 키로 사용합니다.
- suffixes: 병합할 때 중복되는 열 이름에 추가할 접미사를 지정합니다. 기본값은 ('_x', '_y')입니다.
import pandas as pd
# 샘플 데이터프레임 생성
df1 = pd.DataFrame({
'key': ['A', 'B', 'C'],
'value1': [1, 2, 3]
})
df2 = pd.DataFrame({
'key': ['B', 'C', 'D'],
'value2': [4, 5, 6]
})
# Inner Join
result = pd.merge(df1, df2, on='key', how='inner')
# Left Outer Join
result = pd.merge(df1, df2, on='key', how='left')
# Right Outer Join
result = pd.merge(df1, df2, on='key', how='right')
# Full Outer Join
result = pd.merge(df1, df2, on='key', how='outer')
# suffixes 파라미터를 활용한 공통적으로 존재하는 컬럼명 뒤에 오는 수식어 지정하기
result = pd.merge(df1, df2, on='key', how='left', suffixes=('_left', '_right'))
# 병합하는 키 열의 이름이 다른 경우 left_on과 right_on를 활용하여 병합하기
result = pd.merge(df1, df2, left_on='key_1', right_on='key_2')
이와 같이 merge 함수는 다양한 방식으로 데이터프레임을 병합할 수 있는 강력한 도구입니다. 병합할 데이터의 특성과 목적에 맞게 적절한 옵션을 선택하여 사용할 수 있습니다.
인덱스 기준 데이터 합치기 : join()
pandas의 join 함수는 두 데이터프레임을 인덱스를 기준으로 병합하는 데 사용됩니다.
merge 함수와는 달리 join 함수는 기본적으로 인덱스를 사용하여 데이터프레임을 결합합니다.
여기서 join 함수의 주요 매개변수와 사용법을 설명하겠습니다.
join() 함수 사용법
DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='')
주요 매개변수
- other: 병합할 다른 데이터프레임.
- on: 병합할 키 열을 지정합니다. 기본값은 인덱스를 사용합니다. on을 지정하면 인덱스를 사용하지 않습니다.
- how: 병합 방법을 지정합니다. 기본값은 'left'입니다.
- 'left': 왼쪽 데이터프레임의 모든 행과 일치하는 오른쪽 데이터프레임의 행을 결합.
- 'right': 오른쪽 데이터프레임의 모든 행과 일치하는 왼쪽 데이터프레임의 행을 결합.
- 'outer': 일치하는 모든 행을 포함.
- 'inner': 일치하는 행만 포함.
- lsuffix: 왼쪽 데이터프레임의 중복 열 이름에 추가할 접미사.
- rsuffix: 오른쪽 데이터프레임의 중복 열 이름에 추가할 접미사.
import pandas as pd
# 샘플 데이터프레임 생성
df1 = pd.DataFrame({
'value1': [1, 2, 3]
}, index=['A', 'B', 'C'])
df2 = pd.DataFrame({
'value2': [4, 5, 6]
}, index=['B', 'C', 'D'])
# Join 함수를 활용한 기본적인 데이터 병합하기
result = df1.join(df2, lsuffix='_left', rsuffix='_right')
# `lsuffix`와 `rsuffix` 매개변수는 동일한 열 이름이 있을 때 충돌을 피하기 위해 각각 왼쪽과 오른쪽 데이터프레임의 열 이름에 접미사를 추가하는 데 유용합니다.
# 이를 통해 데이터프레임을 병합할 때 열 이름의 혼동을 방지하고, 명확하게 데이터를 구분할 수 있습니다.
# Left Join
result = df1.join(df2, how='left')
# Right Join
result = df1.join(df2, how='right')
# Inner Join
result = df1.join(df2, how='inner')
# Outer Join
result = df1.join(df2, how='outer')
join 함수는 인덱스를 기준으로 두 데이터프레임을 병합할 때 유용합니다.
다양한 병합 방법을 통해 데이터프레임을 결합할 수 있으며, 데이터의 특성에 맞게 left, right, inner, outer 등의 옵션을 선택할 수 있습니다.
on 매개변수를 사용하면 인덱스가 아닌 특정 열을 기준으로 병합할 수도 있습니다.
merge()와 join()에 대한 심화 내용
위에서 merge() 함수와 join() 함수를 사용하여 데이터프레임을 병합하는 방법에 대해 설명했습니다.
두 함수 모두 데이터프레임을 결합하는 데 사용되지만, 사용 방법에 약간의 차이가 있는데 밑에서 이 내용에 대해 설명하겠습니다.
merge() 함수
merge() 함수는 기본적으로 열(Column)을 기준으로 데이터프레임을 병합합니다.
- 인덱스를 키 값으로 사용
- 왼쪽 데이터프레임의 인덱스를 키 값으로 사용: left_index=True
- 오른쪽 데이터프레임의 인덱스를 키 값으로 사용: right_index=True
# 양쪽 모두 인덱스를 키 값으로 사용
merged_df = pd.merge(df1, df2, left_index=True, right_index=True)
# 왼쪽만 인덱스를 키 값으로 사용하고 오른쪽은 특정 컬럼을 키 값으로 사용
merged_df = pd.merge(df1, df2, left_index=True, right_on='some_column_name')
join() 함수
join() 함수는 기본적으로 인덱스를 기준으로 데이터프레임을 병합합니다.
- 컬럼을 키 값으로 사용
- 왼쪽 데이터프레임의 컬럼을 키 값으로 사용: on 매개변수 사용
# 두 데이터프레임의 기준으로 모두 인덱스로 지정되어 있는 경우, 왼쪽 데이터프레임의 컬럼을 키 값으로 사용
joined_df = employee_df.join(survey_df, on='id', rsuffix='_x')
요약
- merge() 함수:
- 다양한 옵션을 제공하여 열 또는 인덱스를 기준으로 데이터프레임을 병합할 수 있습니다.
- 인덱스를 키 값으로 사용할 때 left_index와 right_index 옵션을 사용합니다.
- join() 함수:
- 인덱스를 기준으로 데이터프레임을 병합할 때 간편합니다.
- on 옵션을 사용하여 왼쪽 데이터프레임의 컬럼을 키 값으로 지정할 수 있습니다.
- 오른쪽 데이터프레임은 인덱스만 키 값으로 사용할 수 있습니다.
이번 글에서는 데이터 합치기 / concat 함수 / 조인 연산 / merge 함수 / join 함수 / merge와 join의 심화 내용이 포함된 내용을 정리했으며, 파이썬에서 데이터 분석을 하거나 프로그래밍을 하는 사람들에게 알아두면 유용한 개념들로 이번 기회를 통해 다른 분들도 정리하면 좋을 것 같습니다.
글 읽어주셔서 감사합니다.
출처 및 참고자료 : 코드잇 사이트 강의 'DataFrame 마스터하기' https://www.codeit.kr/topics/mastering-dataframe
'프로그래밍 언어 > Python' 카테고리의 다른 글
[파이썬 개념 정리 17] scikit-learn 라이브러리 (0) | 2024.08.02 |
---|---|
[파이썬 개념 정리 16] Pandas의 DataFrame 마스터하기 6️⃣ (그룹별로 분석하기) (0) | 2024.08.01 |
[파이썬 개념 정리 14] Pandas의 DataFrame 마스터하기 4️⃣ (날짜와 시간 데이터 다루기) (0) | 2024.07.31 |
[파이썬 개념 정리 13] Pandas의 DataFrame 마스터하기 3️⃣ (문자 데이터 가공하기, 숫자 데이터 가공하기) (0) | 2024.07.29 |
[파이썬 개념 정리 12] Pandas의 DataFrame 마스터하기 2️⃣ (데이터 전처리) (0) | 2024.07.28 |
데이터 분석을 공부하고 카페를 열심히 돌아다니는 이야기
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!