본문 바로가기
Python/Basic Data Analysis

[Python] 데이터프레임 결합 (.concat, .append)

by JKyun 2017. 11. 27.

안녕하세요. 우주신 입니다.

 

파이썬에서 데이터프레임을 합치는 여러가지 방법이 있지만,

오늘은 concat, append 두 가지 함수에 대해 포스팅 해보겠습니다.

 

두 데이터프레임을 합치고 싶은데 의도대로 합쳐지지도 않고, 계속해서 에러가 나기도 할텐데, 

기본 기능부터 확실히 짚고 넘어가면 여러 방면으로 활용할 수 있을 것 입니다.

 

pandas부터 import 하고 시작~

import pandas as pd

1. pd.concat()

concat은 연결의 뜻을 가진 concatenation의 줄임말 입니다.

사용하는 방법은 아주 간단 합니다.

 

pd.concat( [데이터프레임, 데이터프레임] )

여기서 데이터프레임은 두 개 이상도 가능합니다만, 꼭 [] 안에 넣어주셔야 에러 안 납니다~

 

먼저, 쉽게 이해하기 위해 Index, Column이 없는 데이터프레임으로 예시를 들어보죠.

df = pd.DataFrame([1,2,3,4,5])
df2 = pd.DataFrame([6,7,8,9,10])

위 두 데이터프레임으로 단순히 concat을 하면 아래와 같이 세로로 합쳐집니다.

이는 axis라는 파라미터의 default가 0으로 설정되어 있기 때문 입니다. (아래 코드)

pd.concat([df,df2], axis=0)

즉, axis가 0인 경우에는 세로로 합쳐진다는 것을 알 수 있죠.

그럼, 반대로 axis가 1인 경우는 가로로 결합되겠죠?

 

이번에는 Index와 Column이 있는 데이터프레임으로 예시를 들어보죠.

df = pd.DataFrame({'A': ['a','a','a'],
                   'B': ['b','b','b']}, index=[0,1,2])

df2 = pd.DataFrame({'C': ['c','c','c'],
                   'D': ['d','d','d']}, index=[3,4,5])

위와 같은 두 데이터프레임을 정의하였는데, 크기는 같지만, Index와 Column 그리고 그 안의 값이 모두 다릅니다.

두 데이터프레임을 결합해보면 아래와 같은 결과가 나오는데,

아까와는 달리 Index와 Column이 정의 되어 있기에 요 concat() 함수는 Index와 Column을 기준으로 결합하려고 합니다.

그러나 공통된 것이 없으니 위와 같은 결과가 나오게 되죠. 

 

그러면 여기서 df2를 df와 같은 index로 정의를 하고 concat을 해보죠.

df2 = pd.DataFrame({'C': ['c','c','c'],
                   'D': ['d','d','d']}, index=[0,1,2])

원하는 결과가 나왔습니다.

두 데이터프레임이 공유하는 Index를 기준으로 가로로 결합된 것을 볼 수 있습니다.

 

똑같은 방법으로 df2를 df와 같은 column으로 정의를 하고 concat를 해보죠.

df2 = pd.DataFrame({'A': ['c','c','c'],
                   'B': ['d','d','d']}, index=[3,4,5])

이번에는 공유되는 column인 A, B를 기준으로 세로로 결합된 것을 볼 수 있습니다.

 

 

2. df.append()

 

이번에는 append 함수를 통해 결합해볼텐데, append의 사용법은 아래와 같습니다.

데이터프레임.append(데이터프레임)

 

append는 concat과는 달리 비교적 간단 합니다. 왜냐하면 세로로만 결합이 되기 때문이죠.

위에서 들었던 예시로 활용을 해보죠.

df = pd.DataFrame([1,2,3,4,5])
df2 = pd.DataFrame([6,7,8,9,10])

위와 같이 Index와 Column이 없는 데이터프레임을 결합할 경우 아래와 같이 세로로 결합이 됩니다.

axis라는 파라미터가 없기에 default가 세로 결합 입니다.

 

원리만 안다면 concat과 같은 기능을 할 수 있습니다.

Column을 A, B로 공유하는 두 데이터프레임을 append 하는 예시만 하나 더 들어보죠.

df = pd.DataFrame({'A': ['a','a','a'],
                   'B': ['b','b','b']}, index=[0,1,2])

df2 = pd.DataFrame({'A': ['c','c','c'],
                   'B': ['d','d','d']}, index=[3,4,5])

 

 

 

댓글