본문 바로가기

💻프로그래밍/python

[pandas] 여러 데이터 프레임을 하나로 합치기(1) concat 쉽게 사용하기

반응형

01. 데이터 프레임 concatenate

데이터를 다루다 보면 여러 개의 데이터 프레임(dataframe)들을 하나로 합쳐야 하는 일이 많이 발생한다. 데이터 프레임을 연결/병합하는 방법은 여러 가지가 있는데, 그중 concat 함수를 사용하면 기준 열(key column)을 사용하지 않고 단순히 데이터를 위/아래 또는 좌/우로 연결(concatenate)할 수 있다.

 

 

 

02. pd.concat 사용법

1️⃣ 데이터 셋 준비

#1.필요한 라이브러리 import
import pandas as pd

#2.데이터 셋 불러오기
df1 = pd.read_csv('heart1.csv')
df2 = pd.read_csv('heart2.csv')

먼저 pandas 라이브러리를 import하고 pd.read_csv로 사용할 데이터셋을 불러온다. 본 게시물은 캐글사이트의 heart attack(심장마비, 심근경색) 분석 및 예측 데이터 세트를 활용한다.( 원본 데이터 세트 heart.csv에서, concat을 활용하기 위해 임의로 데이터세트를 분할하였다.heart1.csv /heart2.csv)

 

 

 

2️⃣ 데이터 파악

df1

 

df2

 

각 데이터 프레임의shape를 확인해 보면

df1는 100개의 행(row)과 14개의 열(columns)로 구성되어 있고

df2는 103개의 row와 14개의 columns로 구성되어 있음을 알 수 있다.

 

 

 

3️⃣ 두 데이터 프레임(df1, df2) concat

 

3-1) axis =0 (위, 아래 방향으로 연결)

total = pd.concat([df1,df2])
total

pd.concat을 이용하여 두 데이터 프레임(df1, df2)을 위, 아래방향으로 연결하였다.

(concat을 사용하여 연결할 때 디폴트는 'axis = 0'이다.

즉 기본적으로는 concat시 위, 아래 방향으로 두 데이터 프레임이 연결된다.)

 이때 pd.concat( )의 괄호 안에는

[연결할 데이터프레임 1, 연결할 데이터프레임 2]를 대괄호로 묶어서 적어주면 된다.

 

 

〰️주의 

total = pd.concat(df1,df2)
total

TypeError: first argument must be an iterable of pandas objects, you passed an object of type "DataFrame"

 

두 데이터 프레임을 대괄호로 묶지 않으면 TypeError가 발생한다!

 

 

 

 

3-2) axis = 1 (좌, 우 방향으로 연결)

total = pd.concat([df1,df2], axis=1)
total

pd.concat( ) 함수는 두 데이터 프레임을 연결할 때 기본적으로 'outer'방식으로 연결한다.

위의 결과를 보면, NaN값이 나타나 있는 것을 볼 수 있는데

이는 df1과 df2의 index가 맞지 않아서 발생되는 것이다.

 

 

다시 말해, df1의 index는 0부터 시작하고

df2의 index는 200부터 시작하기 때문에

이 두 데이터프레임을 단순히 axis=1(좌, 우 방향)으로 연결하였을 때

잘 안 맞기 때문에 빈부분이 NaN값으로 처리가 된 것이다.

 

 

 

df2 = df2.reset_index()
df2

 

total = pd.concat([df1,df2])
total

 

따라서 이러한 경우 df2에 reset_index()를 적용하여

df1의 index와 동일하게 맞춰주고,

다시 pd.concat([df1, df2], axis=1)을 적용하면

두 데이터 프레임이 잘 연결되는 것을 확인할 수 있다.

 

 

 

03. 여러 개의 데이터 프레임 한번에 연결

1️⃣데이터 준비

df = pd.read_csv('heart.csv')
df

#데이터 분할

df1 = df.iloc[:10]
df2 = df.iloc[10:20]
df3 = df.iloc[20:30]
df1

 

 

df2

 

df3

원본 데이터 세트에 iloc함수를 적용하여 

각각을 10개의 행과 14개의 열로 구성된 데이터세트로 분할하였다.

 

 

 

2️⃣ 여러 개의 데이터 프레임(df1,df2,df3) 한번에 concat 적용

2-1) axis =0 (위, 아래 방향으로 연결)

 

total = pd.concat([df1,df2,df3])
total

여러개의 데이터 프레임도 pd.concat을 이용하여 한번에 연결할 수 있다.

이때 [ ] 대괄호 안에 연결하려는 데이터 프레임들을 적어주면 된다.

 

 

 

 

2-2) axis =1 (좌, 우 방향으로 연결)

total = pd.concat([df1,df2,df3], axis=1)
total

axis=1로 설정하면

각 데이터 프레임들을 좌, 우 방향으로 연결시킬 수 있다.

 

 

 

 

🖇사용한 데이터셋 다운

https://www.kaggle.com/datasets/rashikrahmanpritom/heart-attack-analysis-prediction-dataset

반응형