[๋ฉ์์ด์ฌ์์ฒ๋ผ ๋ฐ์ดํฐ๋ถ์ ๋ถํธ์บ ํ 5๊ธฐ] ๋ฐ์ดํฐ ๋ถ์์ ์ํ ์ ์ฒ๋ฆฌ ๊ณผ์ ์์๋ณด๊ธฐ
0. ํ์ต๋ชฉํ
- ๋ฐ์ดํฐ ๋ถ์์ ์ํ ๋ํ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ Pandas, Numpy, scipy... ์ฌ์ฉ์ ์ต์ํด ์ง๋ ๊ฒ
- ์กฐ๊ฑด์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ๋งํ์์ด ์ถ์ถํ๊ธฐ
1. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ๋ฌ์ค๊ธฐ
๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ์ ๊ฐ์ฅ ๋จผ์ ์ํํด์ผ ํ ๊ฒ์
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ๋ฌ์ค๊ธฐ
์ด๋ค.
import pandas as pd
import numpy as np
๊ตฌ๋ถ | Pandas | Numpy |
๐ ์ฃผ์ ๋ชฉ์ | ํ ํํ(tabular data) ๋ค๋ฃจ๊ธฐ (์์ ๋๋) | ํ๋ ฌ ๋ค๋ฃจ๋ฏ์ด ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌ |
๐ฆ ์ฃผ์ ๊ฐ์ฒด | DataFrame, Series | ndarray (N-dimensional array) |
๐ ๊ตฌ์กฐ | ์ด(column) ์ด๋ฆ๊ณผ ํ(row) ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง | ์ซ์๋ง ์๋ ๋ค์ฐจ์ ๋ฐฐ์ด |
โก ์ฑ๋ฅ | ๋น๊ต์ ๋๋ฆผ (ํ์ง๋ง ์ ์ฐํจ) | ๋งค์ฐ ๋น ๋ฆ (C๊ธฐ๋ฐ, ๋ฒกํฐํ ์ฐ์ฐ) |
2. ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ
df1 = pd.read_csv('csv ํ์ผ ๊ฒฝ๋ก', encoding = 'euc-kr')
df1
์ ์ฝ๋๋ csv ํ์ผ์ ๋ถ๋ฌ์ฌ ๋ ์ฝ๋์ด๋ค.
ํ๊ธ์ด ์๋ ํ์ผ์ ๋ถ๋ฌ์ค๋ฉด์ ๊นจ์ง ์ ์๊ธฐ ๋๋ฌธ์ encoding = 'euc-kr'์ ๋ถ์ฌ์ฃผ๋ฉด ๊นจ์ง์ง ์๋๋ค.
๋ง์ฝ ๋ค๋ฅธ ํฌ๋ฉง๋ค๋ ๋ถ๋ฌ์ค๊ณ ์ถ๋ค๋ฉด ์๋ ํ ์ฐธ๊ณ
ํจ์ | ์ฝ๋ ํ์ผ ํ์ | ์์ ํ์ผ๋ช | ์ค๋ช |
pd.read_csv() | CSV ํ์ผ | 'data.csv' | ์ฝค๋ง(,)๋ก ๊ตฌ๋ถ๋ ํ ์คํธ ํ์ผ |
pd.read_excel() | Excel ํ์ผ (.xlsx, .xls) | 'data.xlsx' | ์์ ์ํธ ๋ฐ์ดํฐ |
pd.read_json() | JSON ํ์ผ | 'data.json' | ๋์ ๋๋ฆฌ/๋ฆฌ์คํธ ํํ ๋ฐ์ดํฐ |
pd.read_html() | HTML ํ ์ด๋ธ | 'http://example.com' | ์นํ์ด์ง์ ์๋ ํ ์ด๋ธ ๋ถ๋ฌ์ค๊ธฐ |
pd.read_sql() | SQL ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ | SQL ์ฐ๊ฒฐ ํ์ | ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ |
3. reindex, loc, iloc ๋ณต์ตํ๊ธฐ
์์ ๋ฅผ ์ฐ์ตํ ๋ฐ์ดํฐ ํ๋ ์(df1)์ ํ์๋ค์ ๊ธฐ๋ณธ ์ ๋ณด์ ๊ณผ๋ชฉ๋ณ ์ฑ์ ๋ฐ์ดํฐ์ด๋ค.
์์ 1) ์ปฌ๋ผ ์์๋ฅผ ๊ณผํ, ์ํ, ์์ด, ๊ตญ์ด, ์ฑ๋ณ, ํ๋ , ์ด๋ฆ ์์ผ๋ก ๋ฐ๊พธ์ด๋ผ.
โก๏ธ reindex ํจ์๋ฅผ ์ด์ฉํ์
๋ฐ์ดํฐํ๋ ์.reindex(columns = [์ปฌ๋ผ1, ์ปฌ๋ผ2, ์ปฌ๋ผ3,......])
df2 = df1.reindex(columns = ['๊ณผํ', '์ํ', '์์ด', '๊ตญ์ด', '์ฑ๋ณ', 'ํ๋
', '์ด๋ฆ'])
df2
์์ 1-1)
๊ทธ๋ผ ์ฌ๊ธฐ์ columns = [ ์ฌ๊ธฐ์ ๊ธฐ์กด ๋ฐ์ดํฐํ๋ ์ ์ปฌ๋ผ๋ช
์ ๋ค ์ฐ์ง ์๊ณ ์ผ๋ถ๋ง ๋ฃ๋๋ค๋ฉด] ์ด๋ป๊ฒ ๋ ๊น?
๊ตญ์ด, ์์ด, ์ํ ์ปฌ๋ผ๋ง ๋ฃ๊ณ ์ถ๋ ฅํด๋ณด์.
df3 = df1.reindex(columns = ['๊ตญ์ด', '์์ด', '์ํ'])
df3
๊ทธ๋ผ ์ ํํ ๊ตญ์ด, ์์ด, ์ํ ์ปฌ๋ผ๋ง ๋ฝํ๋ค.
reindex๋ ์ํ๋ ์ปฌ๋ผ๋ง ์ถ์ถ ํ ๋๋ ์ฌ์ฉํ ์ ์๋ค.
์์ 2) ์ธ๋ฑ์ค๊ฐ 0, 2, 4์ธ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ค๊ธฐ
โก๏ธ ์ธ๋ฑ์ค์ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋๋ loc[] ์ ์ฌ์ฉํ๋ค.
๊ฐ์ ธ์ฌ ์ธ๋ฑ์ค๊ฐ ์ฌ๋ฌ๊ฐ์ด๊ธฐ ๋๋ฌธ์ [0, 2, 4] ๋ฆฌ์คํธ๋ก ํ ๋ฒ ๋ฌถ์ด์ loc[]์ ๋ฃ์ด์ค๋ค.
df2 = df1.loc[[0, 2, 4]]
df2
โญ๏ธ ๊ผญ ์๊ณ ๊ฐ์ !!
์ธ๋ฑ์ค๋ ์์๊ฐ์ด ์๋๋ค โโโ
๊ฐ ํ์ ์๋ณํ๊ธฐ ์ํ ์๋ณ์์ด๋ค.๐โ๏ธ๐โ๏ธ๐โ๏ธ
์์ 3) ํ์ ๋์ด๋ ์์๊ฐ 3, 1, 2 ๋ฒ์งธ์ ์๋ ์์๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ
โก๏ธ ์์๊ฐ์ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋๋ iloc[] ์ ์ฌ์ฉํ๋ค.
ํ์ฌ ๋ฐ์ดํฐํ๋ ์์ ์ธ๋ฑ์ค๊ฐ ํ ์์๋๋ก ์ ์ฉ๋๊ณ ์๊ธฐ ๋๋ฌธ์,
์ธ๋ฑ์ค๋ฅผ '์ด๋ฆ'์ผ๋ก ์ฌ์ค์ ํ๊ณ ํด๋น ์์ ๋ฅผ ํ ๊ฒ์ด๋ค.
์์ ๊ฒฝ์ฐ 3๋ฒ์งธ-1๋ฒ์งธ-2๋ฒ์งธ ์์๋ผ๋ฉด ์ํ-์ํฌ-๋ฏผ์ ์์๋ก ์ถ๋ ฅ๋์ด์ผ ํ๋ค.
df3 = df1.iloc[[3, 1, 2]]
df3
4. filter ์ฌ์ฉํ๊ธฐ
์์ 4) ์ด๋ฆ, ๊ตญ์ด, ์์ด ์ปฌ๋ผ๋ง ํํฐ๋ง ํด์ค๊ธฐ
โก๏ธ filter() ๋ฅผ ์ฌ์ฉํ์
df2 = df1.filter(['์ด๋ฆ', '๊ตญ์ด', '์์ด'])
display(df2)
๐ญ ์ง๊ธ๋ณด๋ ์ปฌ๋ผ๋ช ์ผ๋ก ์ํ๋ ์ปฌ๋ผ์ ์ถ์ถํ๋ ๋ฐฉ๋ฒ์ ๊ต์ฅํ ๋ง๋ค.
์์ 5) ์ธ๋ฑ์ค๊ฐ 3, 0, 2, 8์ธ ํ์ ๊ฐ์ ธ์ค๊ธฐ (8์ ์๋ ์ธ๋ฑ์ค โ๏ธ)
โก๏ธ filter() ์์ ์ต์ ์ผ๋ก axis = 0 ์ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
df3 = df1.filter([3, 0, 2, 8], axis = 0)
display(df3)
์๋ ์ธ๋ฑ์ค์ธ 8์ ๋ฌด์ํ๊ณ , 3, 0, 2 ์ธ๋ฑ์ค๋ง ๊ฐ์ ธ์จ๋ค.
์ฐธ๊ณ !!
loc[], iloc[] ์์ ์๋ ์ธ๋ฑ์ค/์์๊ฐ์ ๋ฃ์ผ๋ฉด ์ค๋ฅ๊ฐ ๋์ง๋ง
filter() ์์๋ ์ค๋ฅ๊ฐ ๋์ง ์๋๋ค.
5. ๋ฐ์ดํฐ ์ ๋ ฌํ๊ธฐ
sort_values() ์ฌ์ฉ
์์ 6) '๊ตญ์ด' ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๊ธฐ
โก๏ธ sort_values()์ ๋ํดํธ ๊ฐ์ "์ค๋ฆ์ฐจ์" ์ด๋ค.
๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ณ ์ถ๋ค๋ฉด ascending = False ์ต์
์ ๋ฃ๋๋ค.
df2 = df1.copy()
df2.sort_values('๊ตญ์ด', inplace = True)
display(df1)
display(df2)
๊ตญ์ด ์ ์๊ฐ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค.
์์ 7) ์ฑ๋ณ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์(๋จ์๊ฐ 0, ์ฌ์๊ฐ 1) ์ ๋ ฌ ํ๊ณ , ๊ฐ์ ์ฑ๋ณ ๋ด์์ ๊ตญ์ด ์ฑ์ ์ด ๋์ ์์๋๋ก ์ ๋ ฌํ์ฌ๋ผ.
์ฑ๋ณ ์ปฌ๋ผ์ผ๋ก ์ฐ์ ์ ๋ ฌํ ํ ๊ตญ์ด๋ฅผ ์ ๋ ฌํด์ผํ๊ธฐ ๋๋ฌธ์ ['์ฑ์ ', '๊ตญ์ด'] ์์ผ๋ก ์ ๊ทผํ๋ค.
์ฑ๋ณ์ ์ค๋ฆ์ฐจ์, ๊ตญ์ด๋ ๋ด๋ฆผ์ฐจ์ ์ด๊ธฐ ๋๋ฌธ์ ์ต์
์ผ๋ก ascending = [True, False] ๋ฅผ ์ค์ผํ๋ค.
df2 = df1.copy()
df2.sort_values(['์ฑ๋ณ', '๊ตญ์ด'], inplace=True, ascending = [True, False])
display(df1)
display(df2)
์ฑ๋ณ์ ๋จ์(0) -> ์ฌ์ (1) ์ค๋ฆ์ฐจ์ ๋์๊ณ ,
๊ตญ์ด๋ ๊ฐ๊ฐ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ ๋์๋ค.
์์ 8) ์ธ๋ฑ์ค๊ฐ '์ด๋ฆ'์ผ ๋, ์ธ๋ฑ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ์ฌ๋ผ.
โก๏ธ sort_index() ๋ฅผ ์ฌ์ฉํ์.
# ์๋ณธ ๋ฐ์ดํฐํ๋ ์์ ํผ์ํ์ง ์๊ธฐ ์ํด copy ๋ ์ฃผ๊ธฐ
df2 = df1.copy()
# ์ธ๋ฑ์ค๋ฅผ ์ด๋ฆ์ผ๋ก ์ค์
df3 = df2.set_index('์ด๋ฆ')
df3.sort_index()
ํ๊ธ ๊ฐ๋๋ค ์์ผ๋ก ์ ๋ ฌ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด๋ ์ธ๋ฑ์ค๊ฐ ์ซ์๊ฐ ์๋๋๋ผ๋ ๋ฌธ์์ด ์ ๋ ฌ์ด ๋๋ ๊ฒ์ผ๋ก ํ์ธ๋๋ค.
์ค๋์ ํ๊ณ ๐
์์ ์ ๋น
๋ถ๊ธฐ ์ค๊ธฐ ๊ณต๋ถํ๋ ๊ธฐ์ต์ด ์๋ก์๋ก ํผ์ด๋ฌ๋ค.
filterํจ์์ ๋ ๋ณต์กํ ์กฐ๊ฑด์ ๊ฑธ์ด์ ์ฌ์ฉํ๋๊ฑฐ ๊ฐ์๋ฐ,
์ด๋ฒ์ ์ค๊ธฐ ๋ค์ ๊ณต๋ถํ๋ฉด์ ์ง์ด๋ด์ผ๊ฒ ๋ค.
loc, iloc๋ ๊ณ์ ํท๊ฐ๋ ธ๋๋ฐ ์ด์ ์ ๋ ์๊น๋จน์๊ฑฐ ๊ฐ๋ค.
loc์ ์ธ๋ฑ์ค, iloc์ ์์๊ฐ !
์ถ์ฒ : ๋ฉ์์ด์ฌ์์ฒ๋ผ, ๊ฐ์์๋