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가 발생한다!
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
'💻프로그래밍 > python' 카테고리의 다른 글
Colormaps in Matplotlib (파이썬을 이용한 시각화, 그래프 컬러맵, 맷플롯립 팔레트 명) (0) | 2024.05.13 |
---|---|
파이썬 데이터 이상치(outlier) 제거 방법, 박스플롯(Boxplot) IQR (0) | 2022.12.07 |
[pandas] str.split(expand=Ture) : 하나의 columns를 여러개로 나누기 (0) | 2022.11.21 |
[pandas] csv, tsv 파일 (0) | 2022.11.15 |
[pandas]특정 문자를 포함하는 행 추출 (1) | 2022.11.03 |