본문 바로가기
데이터사이언스

191126 [Pandas] 데이터 프레임 결합

by 프로젝트미냉이 2019. 11. 26.

Pandas는 두 개 이상의 데이터 프레임 또는 시리즈를 결합할 때 merge함수나 concat함수를 사용한다

 

Merge 함수를 이용한 결합 

1. Merge방향

import numpy as np
import pandas as pd

data1 = {
    "학번": [1,2,3,4],
    "이름": ["홍길동","최길동", "아이유", "김연아"],
    "학년": [2,3,3,1]    
}

data2 = {
    "학번": [1,2,4,5],
    "학과": ["컴퓨터", "미술", "철학", "사회"],
    "학점": [1.3,3.5,4.3,2.3]
}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

display(df1)
display(df2)

Inner Join

display(pd.merge(df1, df2, on="학번", how="inner"))

 

Outer Join ( = Full join in R)

display(pd.merge(df1, df2, on="학번", how="outer"))

display(pd.merge(df1, df2, on="학번", how="left"))

 

display(pd.merge(df1, df2, on="학번", how="rigt"))

 

2. 컬럼명이 다른 경우의 결합

컬럼명이 달라도 다음과 같이 결합이 가능하다

각 데이터 프레임의 기준을 명시하기 위해 left_onright_on이라는 인수를 지정해준다.

단, 결과로 출력되는 데이터 프레임에 두 가지 기준열이 모두 출력된다는 점에 유의해야 한다.

 

data1 = {
    "학번": [1,2,3,4],
    "이름": ["홍길동","최길동", "아이유", "김연아"],
    "학년": [2,3,3,1]    
}

data2 = {
    "학생학번": [1,2,4,5],
    "학과": ["컴퓨터", "미술", "철학", "사회"],
    "학점": [1.3,3.5,4.3,2.3]
}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

display(df1)
display(df2)

display(pd.merge(df1, df2, 
                 left_on="학번", 
                 right_on="학생학번", 
                 how="inner"))

 

 

학생학번도 이렇게 출력되었다

 

 

3. 인덱스(Index)를 이용한 결합

Data Frame의 인덱스를 사용하여 결합하는 경우 left_index 또는 right_index 인수를 True로 설정한다.

한쪽 또는 양쪽 데이터 프레임을 모두 index로 설정 가능하다. 

data1 = {
    "학번": [1,2,3,4],
    "이름": ["홍길동","최길동", "아이유", "김연아"],
    "학년": [2,3,3,1]    
}

data2 = {
    "학과": ["컴퓨터", "미술", "철학", "사회"],
    "학점": [1.3,3.5,4.3,2.3]
}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
df2.index = [1,2,4,5]

display(pd.merge(df1, df2, 
                 left_on="학번", 
                 right_index = True, 
                 how="inner"))

df1
df2
결합 결과

 

 

Concat 함수를 이용한 결합

concat 함수는 Merge함수와 달리, 기준열(Key Column)을 지정하지 않고 단순히 데이터를 연결(concatenate)한다.

기본적으로 위/아래로 데이터 행열을 연결하게 되는데,

두 시리즈(Series)나 데이터프레임(Data Frame)을 단순히 연결하기 때문에 인덱스(Index) 값이 중복될 위험이 있다.

 

  • 결합방향의 지정: axis 옵션을 이용한다. axis = 0은 횡으로 결합하는 옵션이고,  axis = 1 는 열로 결합하는 옵션이다. 열로 결합결합시 정렬 옵션은 sort를 이용한다
  • 정렬유무 지정sort 를 True로 지정하면 오름차순으로 정렬된다. False로 지정하면 정렬없이 결합된다. 
s1 = pd.Series([0,1], index = ["a","c"])
s2 = pd.Series([4,3,2], index = ["b","c","e"])

 

s1

s1

s2

s2

행결합

display(pd.concat([s1,s2], axis = 0))

행결합

열결합

display(pd.concat([s1,s2], axis = 1, sort = True))

정렬된 열 결합