Skip to content

판다스 데이터프레임 결합하는 방법: 알아보기!

Updated on

판다스는 데이터사이언스에서 가장 인기있는 오픈소스 도구 중 하나입니다. 판다스는 탭형식의 데이터 조작, 정리, 분석 및 시각화에 높은 수준의 성능을 제공하는 DataFrame 구조체를 제공합니다. 판다스에서는 일반적으로 두 개 이상의 데이터프레임을 병합하여 데이터를 분석하는 경우가 많습니다. 우리는 이를 수평 또는 수직으로 데이터프레임을 결합함으로써 구현할 수 있습니다. 여기서는 두 가지 방법을 상세히 설명하고 논의하겠습니다.

코드 없이 Python 판다스 데이터프레임에서 데이터 시각화를 빠르게 만들고 싶나요?

PyGWalker는 시각화와 함께 탐색적 데이터분석을 위한 파이썬 라이브러리입니다. PyGWalker (opens in a new tab)는 pandas 데이터프레임 및 polars 데이터프레임을 Tableau 스타일의 사용자 인터페이스로 변환하여 Jupyter 노트북 데이터 분석 및 데이터 시각화 워크플로우를 단순화할 수 있습니다.

PyGWalker for Data visualization (opens in a new tab)

두 개의 데이터프레임 세로로 연결하기

판다스에서는 두 개의 데이터프레임을 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             임원

이제, df1df5를 결합할 수 있습니다.

# 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() 메소드를 사용한 결합의 기본 사항을 다루었습니다. 좀 더 많은 판다스 데이터프레임의 지식과 실습을 통해 큰 양의 데이터를 인사이트로 변환할 수 있게 될 것입니다. 판다스에 대해 더 알고 싶다면 아래의 판다스 튜토리얼 페이지를 확인해 보세요.