판다스 데이터프레임 결합하는 방법: 알아보기!
Published on
판다스는 데이터사이언스에서 가장 인기있는 오픈소스 도구 중 하나입니다. 판다스는 탭형식의 데이터 조작, 정리, 분석 및 시각화에 높은 수준의 성능을 제공하는 DataFrame 구조체를 제공합니다. 판다스에서는 일반적으로 두 개 이상의 데이터프레임을 병합하여 데이터를 분석하는 경우가 많습니다. 우리는 이를 수평 또는 수직으로 데이터프레임을 결합함으로써 구현할 수 있습니다. 여기서는 두 가지 방법을 상세히 설명하고 논의하겠습니다.
코드 없이 Python 판다스 데이터프레임에서 데이터 시각화를 빠르게 만들고 싶나요?
PyGWalker는 시각화와 함께 탐색적 데이터분석을 위한 파이썬 라이브러리입니다. PyGWalker (opens in a new tab)는 pandas 데이터프레임 및 polars 데이터프레임을 Tableau 스타일의 사용자 인터페이스로 변환하여 Jupyter 노트북 데이터 분석 및 데이터 시각화 워크플로우를 단순화할 수 있습니다.
두 개의 데이터프레임 세로로 연결하기
판다스에서는 두 개의 데이터프레임을 concat()
메소드를 사용하여 연결할 수 있습니다. 이를 보여주기 위해 먼저 두 개의 샘플 데이터프레임을 생성해서 시작해보겠습니다. 첫 번째 샘플 데이터프레임에서는 회사의 일부 직원에 대한 정보를 가지고 있다고 가정해봅시다:
import pandas as pd
# Creating DataFrame 1
df1 = pd.DataFrame({
'Name': ['John', 'Jack', 'Steve', 'Sarah'],
'Age': [24, 32, 19, 29],
'Gender': ['M', 'M', 'M', 'F']
})
이는 다음과 같은 모양의 데이터프레임을 생성합니다.
Name Age Gender
0 John 24 M
1 Jack 32 M
2 Steve 19 M
3 Sarah 29 F
다른 데이터프레임에서는 회사에서 일하는 부서에 대한 정보가 들어있습니다.
# Creating DataFrame 2
df2 = pd.DataFrame({
'Department': ['Marketing', 'Sales', 'Human Resources'],
'Employees': [15, 12, 10],
})
이는 다음과 같은 모양의 데이터프레임을 생성합니다.
Department Employees
0 Marketing 15
1 Sales 12
2 Human Resources 10
이제 concat()
메소드를 사용하여 두 개의 데이터프레임을 세로로 결합할 수 있습니다.
# Concatenating vertically
df3 = pd.concat([df1, df2], axis=0)
여기서 axis=0
매개변수는 우리가 데이터프레임을 위아래로 쌓아 결합하려고 한다는 것을 나타냅니다. 결합 후 다음 출력을 얻게됩니다.
Name Age Gender Department Employees
0 John 24 M NaN NaN
1 Jack 32 M NaN NaN
2 Steve 19 M NaN NaN
3 Sarah 29 F NaN NaN
0 NaN NaN NaN Marketing 15
1 NaN NaN NaN Sales 12
2 NaN NaN NaN Human Resources 10
우리는 두 개의 데이터프레임이 원하는 대로 연결되어 있는 것을 볼 수 있습니다. 하지만, 열 이름이 일치하지 않는 경우 새로운 데이터프레임에 일부 NaN
(null) 값이 있습니다. 만약 알맞게 맞지 않는다면 이러한 행을 삭제하거나, null 값을 채우기 위해 일부 기본값을 제공할 수 있습니다.
두 개의 데이터프레임 가로로 연결하기
두 개의 데이터프레임을 수평으로 결합하는 (즉, 서로 옆에 놓는) 작업도 concat()
메소드를 사용하여 수행할 수 있습니다.
# Concatenating horizontally
df4 = pd.concat([df1, df2], axis=1)
여기서 axis=1
매개변수는 우리가 데이터프레임을 옆으로 놓아 결합하려고 한다는 것을 나타냅니다. 결합 후 다음 출력을 얻게됩니다.캐너테이션(catenation)을 사용하여 다음 출력 결과를 얻을 수 있습니다.
이름 나이 성별 부서 직원수
0 John 24 M 마케팅 15
1 Jack 32 M 영업 12
2 Steve 19 M 인사 10
3 Sarah 29 F NaN NaN
우리는 두 데이터프레임이 가로 방향으로 결합되었음을 알 수 있습니다. 그러나 행 이름이 일치하지 않는 위치에 NaN
(null) 값이 존재합니다. 다시 말해, 이것들이 데이터 분석과 일치하지 않으면 해당 행을 삭제하거나 null 값을 채울 때 기본값을 제공할 수 있습니다.
서로 다른 열을 가진 데이터프레임을 결합하는 과정
두 데이터프레임이 서로 다른 열을 가진 경우 어떻게 되는지 알아보겠습니다. 이 경우, 판다스가 일치하지 않는 열 이름을 식별하고 새로운 데이터프레임에 별도의 열로 추가합니다. 다음과 같은 예제를 통해 설명하겠습니다.
# 서로 다른 열을 가진 데이터프레임 생성
df5 = pd.DataFrame({
'직원 이름': ['John', 'Jack', 'Steve', 'Sarah'],
'직원 나이': [24, 32, 19, 29],
'직책': ['팀장', '보조', '사무원', '임원']
})
이것은 다음과 같은 데이터프레임을 생성합니다.
직원 이름 직원 나이 직책
0 John 24 팀장
1 Jack 32 보조
2 Steve 19 사무원
3 Sarah 29 임원
이제, df1
과 df5
를 결합할 수 있습니다.
# df1과 df5를 결합합니다.
df6 = pd.concat([df1, df5], axis=1)
이렇게 결합된 후 다음 출력 결과가 생성됩니다.
이름 나이 성별 직원 이름 직원 나이 직책
0 John 24 M John 24 팀장
1 Jack 32 M Jack 32 보조
2 Steve 19 M Steve 19 사무원
3 Sarah 29 F Sarah 29 임원
이제, 판다스는 두 데이터프레임을 병합하여 일치하지 않는 열을 새로운 열로 추가합니다.
열을 무시하고 데이터프레임을 수평으로 결합하는 과정
두 데이터프레임을 가로 방향으로 결합할 때, 새로운 데이터프레임은 두 데이터프레임의 원래 인덱스를 유지합니다. 이는 이 새로운 데이터프레임을 처리하는 동안 문제를 일으킬 수 있습니다. 그러므로, 수평으로 결합할 때 인덱스를 무시하는 것이 필수적인 경우가 있습니다. 이 경우, ignore_index
파라미터를 True
로 설정하여 결합을 수행할 수 있습니다.
# 인덱스를 무시하여 df1과 df2를 결합합니다.
df7 = pd.concat([df1, df2], axis=1, ignore_index=True)
이렇게 결합된 후 다음 출력 결과가 생성됩니다.
0 1 2 3 4
0 John 24 M 마케팅 15
1 Jack 32 M 영업 12
2 Steve 19 M 인사 10
3 Sarah 29 F NaN NaN
이제 새로운 데이터프레임은 더 편리한 데이터 분석을 위한 새로운 인덱스를 가지고 있습니다.
결론
판다스 데이터프레임을 수직 또는 수평으로 결합하는 것은 데이터 분석을 위한 효율적인 방법 중 하나입니다. 이 가이드를 통해 concat()
메소드를 사용한 결합의 기본 사항을 다루었습니다. 좀 더 많은 판다스 데이터프레임의 지식과 실습을 통해 큰 양의 데이터를 인사이트로 변환할 수 있게 될 것입니다. 판다스에 대해 더 알고 싶다면 아래의 판다스 튜토리얼 페이지를 확인해 보세요.