์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ์น๋์๋ณด๋ ๊ธฐ์ด
- serverless
- db
- streamlit
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์๋ฐ
- ํ์ด์ฌ
- ์๋ฐํ๋ก๊ทธ๋๋ฐ
- java
- ํ๋ค์ค
- ์๋๋ก์ด๋ ์คํ๋์ค
- ํ๋ค์ค๊ณต๋ถ
- ์คํธ๋ฆผ๋ฆฟ ๊ธฐ๋ณธ
- ์๋๋ก์ด๋ ์ฑ ๊ฐ๋ฐ
- Streamlit๊ธฐ๋ณธ
- Pandas
- ์๋ฐ๊ธฐ์ด
- ์๋ฐ์คํฌ๋ฆฝํธ ๊ณต๋ถ
- Android
- RESTful API
- ์๋ฐ์ด๋ณด
- ํ์ด์ฌ๊ณต๋ถ
- ์น๋์๋ณด๋ ์ ์
- ์๋ฐ๊ณต๋ถ
- ์คํธ๋ฆผ๋ฆฟ
- Streamlit๊ธฐ์ด
- JavaScript
- MySQL
- ์๋ฐ์คํฌ๋ฆฝํธ
- Flutter
- Today
- Total
ruriruriya
[Python] ํ์ด์ฌ ํ๋ค์ค(Pandas) - NaN ๋น์ด ์๋ ๋ฐ์ดํฐ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ ๋ณธ๋ฌธ
[Python] ํ์ด์ฌ ํ๋ค์ค(Pandas) - NaN ๋น์ด ์๋ ๋ฐ์ดํฐ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ
๋ฃจ๋ฆฌ์ผใ 2023. 11. 15. 09:44
NaN์ด๋?
NaN์ "Not a Number"์ ์ฝ์๋ก, ๊ฒฐ์ธก์น(missing value)๋ฅผ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉ๋๋ ํน์ํ ๊ฐ์ด๋ค. ์ฃผ๋ก ํ์ด์ฌ์ ํ๋ค์ค์ ๊ฐ์ ๋ฐ์ดํฐ ๋ถ์ ๋๊ตฌ์์ ์ฌ์ฉ๋๋ค.
NaN์ ๋ฐ์ดํฐ์
์์ ๊ฐ์ด ์กด์ฌํ์ง ์๊ฑฐ๋ ์ํ์ ์ผ๋ก ์ ์ํ ์ ์๋ ์ํ๋ฅผ ๋ํ๋ธ๋ค. ์ด๊ฒ์ ๋ฐ์ดํฐ์ ๋ถ์ฌ, ๋๋ฝ, ๋๋ ํน์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ์ ์๋์ง ์๋ ๊ฒฝ์ฐ์ ํด๋นํ๋ค.
๋จผ์ ๋ฐ์ดํฐํ๋ ์์ ํตํด NaN ๋ฐ์ดํฐ๋ฅผ ์์๋ณด์.
>> items2 = [{'bikes': 20, 'pants': 30, 'watches': 35, 'shirts': 15, 'shoes':8, 'suits':45},
{'watches': 10, 'glasses': 50, 'bikes': 15, 'pants':5, 'shirts': 2, 'shoes':5, 'suits':7},
{'bikes': 20, 'pants': 30, 'watches': 35, 'glasses': 4, 'shoes':10}]
>> df=pd.DataFrame(data= items2, index= ['store 1','store 2','store 3'])
>> df
NaN๋ฅผ ํ์ ํ๋ ๋ฐฉ๋ฒ
isna() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด NaN ์ด ํด๋น๋ ์ ์ true๋ก ๋ํ๋ธ๋ค.
>> #๋ณ์๋ช
.isna
>> df.isna()
๊ฑฐ๊พธ๋ก ์๊ณ ์ถ๋ค๋ฉด notna() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
true(๊ฐ์ด ์๋ ๊ฒ, NaN์ด ์๋ ๊ฒ), false(๊ฐ์ด NaN์ธ ๊ฒ)
>> df.notna()
๊ทธ๋ฆฌ๊ณ ์ปฌ๋ผ๋ณ๋ก NaN ์ ๊ฐ์๋ฅผ ์๊ณ ์ถ๋ค๋ฉด sum() ๋ฉ์๋๋ฅผ ์ถ๊ฐํ์ฌ ์คํํ๋ค.
>> df.isna().sum()
bikes 0
pants 0
watches 0
shirts 1
shoes 0
suits 1
glasses 1
dtype: int64
์ ์ฒด ๋ฐ์ดํฐ์์ NaN ์ ๊ฐ์๋ฅผ ์๊ณ ์ถ๋ค๋ฉด sum() ๋ฉ์๋๋ฅผ ํ๋ฒ ๋ ์ถ๊ฐํ๋ค.
>> df.isna().sum().sum()
3
NaN๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ
1. NaN๋ฅผ ์ญ์ ํ๋ ๋ฐฉ๋ฒ
๋น์ด์๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์๋ด์ด ๊ทธ ํ์ ์ญ์ ํ๋ค.(๋ณดํต ์ด์ ์ญ์ ํ๋ค๊ธฐ ๋ณด๋จ ํ์ ์ญ์ ํ๊ธฐ ๋๋ฌธ์)
>> df.dropna()
2. ํน์ ๊ฐ์ผ๋ก ์ฑ์ฐ๋ ๋ฐฉ๋ฒ
NaN ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ํ์ ์ญ์ ํ ์ ์๋ค๋ฉด ์ฑ์ฐ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผํ๋ค.
NaN๋ฅผ ์ซ์๋ฅผ 0์ผ๋ก ์ฑ์ฐ๊ธฐ
fillna() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด NaN ๋ฐ์ดํฐ๋ฅผ 0์ผ๋ก ์ฑ์ NaN๋ฅผ ์์จ ์ ์๋ค.
>> df.fillna(0)
NaN๋ฅผ ๋ฌธ์ '๋ฐ์ดํฐ ์์'์ผ๋ก ์ฑ์ฐ๊ธฐ
0 ๋์ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ ์ํ๋ ๋ฌธ์์ด๋ก ๋์ฒดํ ์ ์๋ค.
>> df.fillna('๋ฐ์ดํฐ ์์')
ํน์ NaN ๋ฐ์ดํฐ๋ง ๋ณ๊ฒฝํ๊ธฐ
๋ง์ฝ shirts ์ปฌ๋ผ์ NaN๋ง ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด
shirts ์ปฌ๋ผ๋ง ์ง์ ํ์ฌ NaN ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
>> df['shirts'].fillna('No data')
store 1 15.0
store 2 2.0
store 3 No data
Name: shirts, dtype: object
์์ด๋ ๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ์ฑ์ฐ๊ธฐ
์์ ํ์ ๋ฐ์ดํฐ๋ก ์ฑ์ฐ๋ ๋ฐฉ๋ฒ์ fillna ๋ฉ์๋์ ffill์์ฑ์ ์ฌ์ฉํ๊ณ (์์ f๋ forward)
๋ค์ ํ์ ๋ฐ์ดํฐ๋ก ์ฑ์ฐ๋ ๋ฐฉ๋ฒ์ bfill์์ฑ์ ์ฌ์ฉํ๋ค. (b๋ back)
axis ์์ฑ์ ๊ฐ์ ๋ฐ๋ผ ํ์ด ๋ฐฉํฅ์ ์ง์ ํ ์ ์๋ค.
axis=0: ์ด ๋ฐฉํฅ์ผ๋ก ์๋
axis=1: ํ ๋ฐฉํฅ์ผ๋ก ์๋
>> df.fillna(method= 'ffill', axis=0)
๊ฐ ์ปฌ๋ผ๋ณ ํ๊ท ๊ฐ, ์ต์๊ฐ, ์ต๋๊ฐ์ผ๋ก ์ฑ์ฐ๊ธฐ
mean() ๋ฉ์๋๋ ํ๋ค์ค์์ Series๋ DataFrame์ ํ๊ท ์ ๊ณ์ฐํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ด ๋ฉ์๋๋ ์ฃผ์ด์ง ์ถ์ ๋ฐ๋ผ ํ๊ท ์ ๊ณ์ฐํ๋ค.
>> df.mean()
bikes 18.333333
pants 21.666667
watches 26.666667
shirts 8.500000
shoes 7.666667
suits 26.000000
glasses 27.000000
dtype: float64
>> df.fillna(df.mean()) # ํ๊ท ๊ตฌํ๋ค์์ Nan ๊ฐ ์๋์ผ๋ก ๋ค์ด๊ฐ
>> df.fillna(df.max()) #์ต๋๊ฐ์ผ๋ก ์ฑ์ฐ๊ธฐ
>> df.fillna(df.min()) #์ต์๊ฐ์ผ๋ก ์ฑ์ฐ๊ธฐ