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

[ํŒŒ์ด์ฌ] ๋ฐ์ดํ„ฐ ๋‹ค๋“ฌ๊ธฐ

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

 

๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๋Œ€๋กœ ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ์ด์ƒํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.

์›๋ณธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋“ฌ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. 

 

๊ฒฐ์ธก๊ฐ’ ์ฐพ๊ธฐ

๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

 

info()

๊ฒฐ์ธก๊ฐ’ ์ฐพ๋Š” ๋ฒ• 1

713๊ฐœ์˜ row ์ค‘์— rating(๋ณ„์ )๋งŒ 700๊ฐœ๋ผ๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

isna()

๊ฒฐ์ธก๊ฐ’์ด ์žˆ์œผ๋ฉด True, ์—†์œผ๋ฉด False ๋กœ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์œผ๋กœ ๋ณด์—ฌ์ค€๋‹ค.

 

isna().sum()

๊ทธ๋ƒฅ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์œผ๋กœ ๋ณด๋ฉด ๋ถˆํŽธํ•˜๋‹ค.

sum()ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์—์„œ true ๊ฐ’(1)์„ ๋”ํ•ด์ค€๋‹ค. rating์— 13๊ฐœ์˜ ๊ฒฐ์ธก๊ฐ’์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

isna().any(axis=1)

๋ชจ๋“  row๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ํ•จ์ˆ˜

0ํ–‰๋ถ€ํ„ฐ 712ํ–‰๊นŒ์ง€ ๊ฒฐ์ธก๊ฐ’์ด ์žˆ๋Š” ํ–‰์€ True๋กœ ๋ณด์—ฌ์ค€๋‹ค.

 

์œ„์—์„œ ์ฐพ์€ ๊ฐ’๋งŒ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์œผ๋กœ ๊ฐ€์ ธ์˜ค๋ฉด ๊ฒฐ์ธก๊ฐ’์ด ์žˆ๋Š” row๋งŒ ์ถœ๋ ฅ๋œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋ฉด ๋“ฑ๋ก๋œ ๋ฆฌ๋ทฐ๊ฐ€ ์—†์–ด์„œ ๋ณ„์ ์ด NaN๋กœ ๋‚˜์˜จ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 


๊ฒฐ์ธก๊ฐ’ ์ฒ˜๋ฆฌํ•˜๊ธฐ

 

์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ค„์–ด๋“ ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Œ

 

์ •ํ™•ํ•œ ๋ฐ์ดํ„ฐ๋Š” ์•„๋‹ˆ์ง€๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์ค„์–ด๋“ค์ง€ ์•Š๋Š”๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Œ

 

๊ฒฐ์ธก๊ฐ’ ์‚ญ์ œํ•˜๊ธฐ

dropna()

 

๊ฒฐ์ธก๊ฐ’ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์ฑ„์šฐ๊ธฐ

๋จผ์ € ํ•ด๋‹น ์ปฌ๋Ÿผ์˜ ํ‰๊ท ๊ฐ’์„ ๊ตฌํ•ด์ค€ ๋’ค ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜ ํ•จ์ˆ˜๋กœ ๊ฒฐ์ธก๊ฐ’์„ ์ฑ„์›Œ์ค€๋‹ค.

fillna(๋ณ€์ˆ˜๋ช…)

 

๊ทธ๋Ÿฌ๋ฉด ์‹œ๋ฆฌ์ฆˆ๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ ์ด๋ฅผ ํ•ด๋‹น ์ปฌ๋Ÿผ์— ์ €์žฅํ•˜๊ณ  ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ํ™•์ธํ•˜๋ฉด ์ž˜ ์ฑ„์›Œ์ง„ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

ํ™•์‹คํžˆ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด isna().sum()์œผ๋กœ ๊ฒฐ์ธก๊ฐ’์˜ ์ˆ˜๋ฅผ ํ™•์ธํ•œ๋‹ค.

 

 

์‹ค์Šต 1

import pandas as pd

cellphone_df = pd.read_csv('data/cellphone.csv')

# ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.
mini13_weight = 140
cellphone_df['weight'] = cellphone_df['weight'].fillna(mini13_weight)
cellphone_df[cellphone_df['year'] == 2021]

 


์ค‘๋ณต๊ฐ’ ์ฐพ๊ธฐ

๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ

 

duplicated()

์ค‘๋ณต๊ฐ’์ด ์žˆ์œผ๋ฉด True๋กœ ๋‚˜์˜ค๋Š” ํ•จ์ˆ˜. 

๊ทธ๋ฆฌ๊ณ  ์•„๊นŒ์ฒ˜๋Ÿผ sum()์„ ์‚ฌ์šฉํ•˜์—ฌ True ๊ฐœ์ˆ˜๋ฅผ ๋”ํ•ด์ค˜์„œ ์ด ์ค‘๋ณต๊ฐ’์ด 2๊ฐœ๋ผ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์œผ๋กœ ๋ณด๋ฉด ์ „์ฒด ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ค‘๋ณต๋˜๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

subset='์ปฌ๋Ÿผ๋ช…'

ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋„ฃ์œผ๋ฉด ์ปฌ๋Ÿผ๋ช…์ด id์ธ ์ปฌ๋Ÿผ๋งŒ ์ค‘๋ณต๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

 

์—ฌ๊ธฐ์„œ ๋งˆ์ง€๋ง‰ 2๊ฐœ์˜ ํ–‰์„ ๋ณด๋ฉด ์•„์ด๋””๊ฐ’์ด ๋‹ค๋ฅด๋‹ค๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ ์ด์œ ๋Š” ์ค‘๋ณต๊ฐ’์„ ์ฐพ์•„์˜ฌ ๋•Œ ์ฒ˜์Œ ๋‚˜์˜จ ๊ฐ’์€ ์ค‘๋ณต์œผ๋กœ ์•ˆ์น˜๊ณ , 2๋ฒˆ์งธ ๊ฐ’๋ถ€ํ„ฐ ์ค‘๋ณต๊ฐ’์œผ๋กœ ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

keep = 'first'

keep์ด๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ธฐ๋ณธ๊ฐ’์ด first์ด๋‹ค.

์ฆ‰ ์œ„ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

 

 

keep = 'last'

์—ฌ๊ธฐ์„œ keep์˜ ๊ฐ’์œผ๋กœ last๋ฅผ ์“ฐ๋ฉด, ๋งจ ๋’ค์— ์žˆ๋Š” ๊ฐ’์€ ๋นผ๊ณ  ๋‚˜๋จธ์ง€ ๊ฐ’์„ ์ค‘๋ณต๊ฐ’์œผ๋กœ ๋ฐ๋ ค์˜จ๋‹ค.

์ธ๋ฑ์Šค๋ฅผ ๋ณด๋ฉด ๋ณ€ํ™”๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

keep = False ๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ

first, last ์ƒ๊ด€ ์—†์ด ์ค‘๋ณต๋˜์—ˆ๋‹ค๋ฉด ์ „๋ถ€ ๊ฐ€์ ธ์˜จ๋‹ค.

 

 


์ค‘๋ณต๊ฐ’ ์ฒ˜๋ฆฌํ•˜๊ธฐ

๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ

 

drop_duplicates()

๋ชจ๋“  ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ค‘๋ณต๋˜์–ด์•ผ ์ค‘๋ณต๊ฐ’์ด๋ผ๊ณ  ๋ณด๊ณ , ํ•ด๋‹น row๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

๋‹น์—ฐํžˆ ์ค‘๋ณต๊ฐ’์ค‘ ํ•˜๋‚˜๋Š” ๋‚จ๊ฒจ๋†“๊ณ  ์‚ญ์ œํ•œ๋‹ค.

 

์—ฌ๊ธฐ์„œ๋„ ์ „์ฒด ์ค‘๋ณต์ด ์•„๋‹Œ id์ปฌ๋Ÿผ ํ•˜๋‚˜๋งŒ ์ค‘๋ณต์ด์–ด๋„ ๋‹ค ์‚ญ์ œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด subset ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

keepํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋งˆ์ง€๋ง‰์— ์žˆ๋Š” ์ค‘๋ณต๊ฐ’๋งŒ ๋‚จ๊ธฐ๊ณ  ์ „๋ถ€ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

์ค‘๋ณต๊ฐ’์„ ์ œ๊ฑฐํ•œ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ์ €์žฅํ•ด์ฃผ๊ณ 

 

 

์ •๋ง๋กœ ์‚ญ์ œ๋œ ๊ฒŒ ๋งž๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

 

์‹ค์Šต 1

import pandas as pd

cellphone_df = pd.read_csv('data/cellphone.csv')

# ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.
cellphone_df = cellphone_df.drop_duplicates()
cellphone_df


์ด์ƒ์  ์ฐพ๊ธฐ

 

 

๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ

 

 

1์‚ฌ๋ถ„์œ„์ˆ˜์™€ 3์‚ฌ๋ถ„์œ„์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ  iqr์„ ๊ตฌํ•œ๋‹ค.

 

 

๋ฆฌ๋ฐ‹์„ ๊ตฌํ•ด ์ €์žฅํ•ด์ค€๋‹ค.

 

 

๋ถˆ๋ฆฐ ์ธ๋ฑ์‹ฑ์„ ํ•˜๊ณ ๋‚˜๋ฉด ๊ฐ€๊ฒฉ์ด ๋„ˆ๋ฌด ์ €๋ ดํ•˜๊ฑฐ๋‚˜ ๋„ˆ๋ฌด ๋น„์‹ผ ์ด์ƒ์  ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 


์ด์ƒ์  ์ฒ˜๋ฆฌํ•˜๊ธฐ

 

1. ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ์•Š๊ธฐ

2. ๊ธฐ์ค€์ ๋ณด๋‹ค ๋‚ฎ๊ฑฐ๋‚˜ ๋†’์€ ์ด์ƒ์ ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์ค€๋‹ค. 

3. ์ด์ƒ์ ์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•œ๋‹ค. (์˜ค๋ฅ˜๊ฐ€ ํ™•์‹คํ•  ๋•Œ / ์ง€์›Œ๋„ ์˜ํ–ฅ์ด ์—†์„ ๋•Œ)

 

 

๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ

 

 

์•„๊นŒ ๋งŒ๋“  ๊ฐ’์œผ๋กœ ๊ธฐ์ค€์  ๋‚ด์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค๋งŒ ๋ฝ‘์•„์ค€๋‹ค.

 

 

707๊ฐœ์˜€๋˜ ๋กœ์šฐ๊ฐ€ ์ด์ƒ์  ๋ฐ์ดํ„ฐ 4๊ฐœ๋ฅผ ์ œ์™ธํ•˜๊ณ  703๊ฐœ๋งŒ ๋‚จ์•˜๋‹ค.

 

์‹ค์Šต 1

import pandas as pd

cellphone_df = pd.read_csv('data/cellphone.csv')

# ์—ฌ๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.
q1 = cellphone_df['price'].quantile(0.25)
q3 = cellphone_df['price'].quantile(0.75)
iqr = q3 - q1

lower_limit = q1 - 1.5 * iqr
upper_limit = q3 + 1.5 * iqr

cellphone_df = cellphone_df[(cellphone_df['price'] >= lower_limit) &(cellphone_df['price'] <= upper_limit)]
cellphone_df


์ฝ”๋“œ์ž‡ 14. ๋ฐ์ดํ„ฐ ๋‹ค๋“ฌ๊ธฐ