Pandas Merging 101: Python과 Pandas를 이용한 데이터 합치기
Pandas Merging 101: Python과 Pandas를 이용한 데이터 합치기
데이터 분석에서 여러 데이터 프레임을 결합하는 작업은 매우 흔하게 발생합니다. Pandas 라이브러리는 merge()
함수를 제공하여 이러한 작업을 간편하게 수행할 수 있도록 합니다. 이 문서에서는 Pandas Merging 101을 통해 merge()
함수의 기본적인 사용법부터 다양한 옵션까지 자세히 살펴보겠습니다.
준비물
본 튜토리얼을 따라 하기 위해서는 다음과 같은 준비물이 필요합니다.
- Python 3 이상
- Pandas 라이브러리 설치:
pip install pandas
예시 데이터
다음 두 개의 예시 데이터 프레임을 사용하여 Pandas Merging 101을 진행합니다.
# 직원 정보 데이터 프레임
employees = pd.DataFrame({
"EmployeeID": [1001, 1002, 1003, 1004],
"FirstName": ["John", "Jane", "Peter", "Sarah"],
"LastName": ["Doe", "Doe", "Smith", "Jones"],
"Department": ["Sales", "Marketing", "Sales", "IT"]
})
# 부서 정보 데이터 프레임
departments = pd.DataFrame({
"DepartmentID": [1, 2, 3],
"DepartmentName": ["Sales", "Marketing", "IT"],
"ManagerID": [1005, 1006, 1007]
})
기본적인 merge() 사용법
merge()
함수는 두 개의 데이터 프레임을 하나로 합치는 데 사용됩니다. 가장 기본적인 사용법은 다음과 같습니다.
# 두 데이터 프레임을 "Department" 열을 기준으로 합침
merged_df = employees.merge(departments, on="Department")
print(merged_df)
# 결과
# EmployeeID FirstName LastName Department DepartmentID DepartmentName ManagerID
# 0 1001 John Doe Sales 1 Sales 1005
# 1 1002 Jane Doe Sales 1 Sales 1005
# 2 1003 Peter Smith Sales 1 Sales 1005
# 3 1004 Sarah Jones IT 3 IT 1007
위 코드에서 on
파라미터는 두 데이터 프레임을 합치는 기준 열을 지정합니다. 이 예시에서는 employees
데이터 프레임의 Department
열과 departments
데이터 프레임의 Department
열을 기준으로 합쳐졌습니다.
다양한 join 유형
merge()
함수는 다양한 join 유형을 지원합니다. join 유형은 어떤 데이터를 포함할 것인지 결정합니다.
- inner join (기본값): 두 데이터 프레임 모두에서 존재하는 데이터만 포함합니다.
- left join: 왼쪽 데이터 프레임의 모든 데이터를 포함하며, 오른쪽 데이터 프레임에서 일치하는 데이터만 포함합니다.
- outer join: 두 데이터 프레임의 모든 데이터를 포함하며, 일치하지 않는 데이터는 NaN으로 채웁니다.
다음은 join 유형에 따른 결과 예시입니다.
# inner join
merged_df = employees.merge(departments, on="Department", how="inner")
# left join
merged_df = employees.merge(departments, on="Department", how="left")
# right join
merged_df = employees.merge(departments, on="Department", how="right")
# outer join
merged_df = employees.merge(departments, on="Department", how="outer")
다른 옵션
merge()
함수에는 다양한 옵션을 사용하여 결과를 조정할 수 있습니다.
- left_on, right_on: 왼쪽, 오른쪽 데이터 프레임의 합치 기준 열을 지정합니다.
- suffixes: 합쳐진 열 이름에 추가할 접미사를 지정합니다.
- validate: 합쳐진
Pandas Merging 101 예제 코드
# 두 데이터 프레임을 "Department" 열을 기준으로 합침
merged_df = employees.merge(departments, on="Department")
print(merged_df)
# inner join (기본값)
merged_df = employees.merge(departments, on="Department", how="inner")
# left join
merged_df = employees.merge(departments, on="Department", how="left")
# right join
merged_df = employees.merge(departments, on="Department", how="right")
# outer join
merged_df = employees.merge(departments, on="Department", how="outer")
다른 옵션
# left_on, right_on 사용
merged_df = employees.merge(departments, left_on="Department", right_on="DepartmentName")
# suffixes 사용
merged_df = employees.merge(departments, on="Department", suffixes=("_emp", "_dept"))
# validate 사용
merged_df = employees.merge(departments, on="Department", validate="1:m")
추가 예시
indicator
옵션을 사용하여 일치 여부를 표시하는 열 추가- 여러 열을 기준으로 합치기
how
옵션과 함께filter
함수 사용
Pandas 데이터 프레임 합치기 대체 방법
concat()
함수는 두 개의 데이터 프레임을 축 (axis) 기준으로 연결하는 데 사용됩니다. merge()
함수와 달리, 두 데이터 프레임의 열이 일치할 필요는 없습니다.
# 열 기준으로 연결
combined_df = pd.concat([employees, departments], axis=1)
# 행 기준으로 연결
combined_df = pd.concat([employees, departments], axis=0)
join() 메서드
DataFrame
객체는 join()
메서드를 제공하여 다른 데이터 프레임을 합칠 수 있습니다. merge()
함수와 동일한 기능을 제공하지만, 코드 스타일 면에서 다소 차이가 있습니다.
# "Department" 열을 기준으로 합침
combined_df = employees.join(departments, on="Department")
dictionary comprehension
데이터 프레임이 작은 경우, dictionary comprehension을 사용하여 간단하게 합칠 수 있습니다.
# dictionary comprehension 사용
combined_df = pd.DataFrame({
**employees.to_dict(),
**departments.to_dict(),
})
SQL join
만약 데이터 프레임이 데이터베이스 테이블에서 가져온 경우, SQL join을 사용하여 데이터베이스 서버에서 직접 합칠 수 있습니다.
SELECT *
FROM employees
INNER JOIN departments
ON employees.Department = departments.DepartmentName;
선택 가이드
- 데이터 프레임의 열이 일치하고, 합치기 기준 열이 명확한 경우:
merge()
함수 사용 - 데이터 프레임의 열이 일치하지 않거나, 축 기준으로 연결해야 하는 경우:
concat()
함수 사용 - 코드 스타일적 선호 또는 간단한 합침 작업:
join()
메서드 사용 - 데이터 프레임이 데이터베이스 테이블인 경우: SQL join 사용
python pandas join