๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋งˆ์ผ€ํŒ…/๋ฐ์ดํ„ฐ ๋ถ„์„

[ํŒŒ์ด์ฌ] ๋ฐ์ดํ„ฐ ํ•ฉ์น˜๊ธฐ

by ํผํฌ๋งˆ์ฒผ๋ผ 2025. 3. 14.

 

๊ฐ™์€ ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ ํ•ฉ์น˜๊ธฐ : concat()

๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๋งŒ๋“ค์–ด์คฌ๋‹ค.

๊ฐ๊ฐ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ํ™•์ธํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์–ด์ฐจํ”ผ ๊ฐ™์€ ์˜์–ด ์ ์ˆ˜๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์ด๋ผ ๋‘๊ฐœ๋ฅผ ํ•ฉ์นœ๋‹ค.

concat()

ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋„˜๊ฒจ์ค€๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ธ๋ฑ์Šค๊ฐ€ ์ด์ƒํ•˜๊ฒŒ ๋‚˜์˜จ๋‹ค.

ignore_index

ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด True๋กœ ์ง€์ •ํ•ด์ฃผ๋ฉด ์ธ๋ฑ์Šค๋„ ๊น”๋”ํ•˜๊ฒŒ ๋‚˜์˜จ๋‹ค.

์ด๋ฅผ ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋กœ ์ €์žฅํ•ด์ค€๋‹ค.

 

์ด๋ฒˆ์—๋Š” ์ˆ˜ํ•™์ ์ˆ˜ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค.

์˜์–ด ์ ์ˆ˜์™€ ์ˆ˜ํ•™ ์ ์ˆ˜๋ฅผ ํ•ฉ์ณ์ฃผ์—ˆ๋”๋‹ˆ ๊ทธ๋ƒฅ ์ปฌ๋Ÿผ ํ•˜๋‚˜๋ฅผ ๋” ๋งŒ๋“ค์–ด ๋ถ™์˜€๋‹ค. 

์ด์ƒํ•œ ๊ฒฐ๊ณผ๋‹ค.

axis=1 ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜†์œผ๋กœ ๋ถ™์—ฌ์ค€๋‹ค.

 

์‹ค์Šต

import pandas as pd

sales_2020_df = pd.read_csv('data/sales_2020.csv')
sales_2021_df = pd.read_csv('data/sales_2021.csv')
sales_2022_df = pd.read_csv('data/sales_2022.csv')

# ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.
sales_df = pd.concat([sales_2020_df,sales_2021_df,sales_2022_df])
sales_df


์กฐ์ธ ์—ฐ์‚ฐ

 


์ปฌ๋Ÿผ ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ ํ•ฉ์น˜๊ธฐ : merge()

๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

merge()

๋‘๊ฐœ์˜ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ํ•ฉ์ณ์ค€๋‹ค. ์ด๋•Œ ๊ธฐ์ค€์ด ๋˜๋Š” key๊ฐ’์„ id๋กœ ํ•œ๋‹ค.

on ํŒŒ๋ผ๋ฏธํ„ฐ

๊ธฐ๋ณธ ์กฐ์ธ ๋ฐฉ๋ฒ•์€ inner ์กฐ์ธ์ด๋‹ค.

๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด how ๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์—

left, right, outer ๋กœ ์จ์„œ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ๋‘๊ฐœ์˜ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ id๋ฅผ ํ‚ค๊ฐ’์œผ๋กœ ํ•ฉ์ณค๋Š”๋ฐ, department๋„ ์ผ์น˜ํ•˜๋Š” ์ •๋ณด์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ž๋™์œผ๋กœ ์ปฌ๋Ÿผ๋ช… ๋’ค์— _x, _y๋กœ ๋ถ™์–ด์„œ ๋‚˜์˜ค์ง€๋งŒ ๋‚ด๊ฐ€ ์„ค์ •ํ•ด์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

suffixes ๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์™ผ์ชฝ์ด๋ฆ„, ์˜ค๋ฅธ์ชฝ ์ด๋ฆ„์„ ์ง€์ •ํ•ด์ค€๋‹ค.

๋งŒ์•ฝ ๋™์ผํ•œ ํ‚ค๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ ๊ทธ ํ‚ค์˜ ์ปฌ๋Ÿผ๋ช…์ด ๋‹ค๋ฅด๋‹ค๋ฉด left_on, right_on ์ด๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์‹ค์Šต

import pandas as pd

asteroid_df = pd.read_csv('data/asteroid.csv')
orbit_df = pd.read_csv('data/orbit.csv')

# ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.
nasa_df = pd.merge(asteroid_df, orbit_df, left_on='id', right_on='asteroid_id')
nasa_df

 


์ธ๋ฑ์Šค ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ ํ•ฉ์น˜๊ธฐ : join()

๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜จ ๋’ค์— ์ธ๋ฑ์Šค๋ฅผ ์•„์ด๋””๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

join()

ํ•จ์ˆ˜๋Š” ๊ธฐ๋ณธ์ด left outer join์ด๋‹ค.

๊ฐ™์€ ์ปฌ๋Ÿผ๋ช…์— ๋Œ€ํ•ด ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚˜๊ธฐ๋•Œ๋ฌธ์— lsuffix, rsuffix ๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ด์šฉํ•ด ์ง€์ •ํ•ด์ค€๋‹ค.

ํ•œ๊ฐœ๋งŒ ์ง€์ •ํ•ด์ค˜๋„๋œ๋‹ค.

๋งŒ์•ฝ ์กฐ์ธ ๋ฐฉ๋ฒ•์„ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด, merge์ฒ˜๋Ÿผ how ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ”๊ฟ”์ค€๋‹ค.

 

์‹ค์Šต

import pandas as pd

asteroid_df = pd.read_csv('data/asteroid.csv', index_col='id')
orbit_df = pd.read_csv('data/orbit.csv', index_col='asteroid_id')

# ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.
nasa_df = asteroid_df.join(orbit_df, how='inner')
nasa_df

 


์กฐ์ธํ•œ ๋ฐ์ดํ„ฐ๋กœ ์ƒˆ๋กœ์šด ์ธ์‚ฌ์ดํŠธ ์–ป๊ธฐ

ํ‡ด์‚ฌํ•œ ์ง์›๊ณผ ์žฌ์ง์ค‘์ธ ์ง์›์˜ ๋งŒ์กฑ๋„ ์กฐ์‚ฌ๋ฅผ ๋น„๊ตํ•œ๋‹ค.

์ปค๋ฆฌ์–ด ๋ถ€๋ฌธ์—์„œ 1์ ์˜ ์ฐจ์ด๊ฐ€ ๋‚œ๋‹ค.

์ธ์‚ฌํŒ€์€ ์ปค๋ฆฌ์–ด ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœ ๋˜๋Š” ๊ต์œก์„ ํ•ด์•ผ๋  ๊ฒƒ์ด๋‹ค.

 


์ฝ”๋“œ์ž‡ 18. ๋ฐ์ดํ„ฐ ํ•ฉ์น˜๊ธฐ