๐ตPandas 4. pd.Categorical( )
๐ต ๊ฐ๋์ฉ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ๋ฅผ ํ๋ค ๋ณด๋ฉด sort_values( ) ํจ์๋ sort_index( ) ํจ์๋ฅผ ์จ๋ ์ํ๋๋๋ก ์ ๋ ฌ์ด ์ด๋ค์ง์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด ์ํฉ์ apply( ) ๋ก ์์์ ํจ์๋ฅผ ๋ฐ์ดํฐ์ ์ ์ฉํ ๋ ์ฃผ๋ก ์๊ธฐ๋๋ฐ, ์ด๋ฒ ํฌ์คํ ์์๋ ์ด๋ฅผ ํด๊ฒฐํ๋ ํจ์์ ๋ํด์ ์์๋ณด์.
pd.Categorical( ) ํจ์
๐ต ์์ ํฌ์คํ ์์ ๋ค๋ฃฌ pd. to_datetime( ) ํจ์์ dt ๋ฉ์๋๋ฅผ ์ ์ฉํ๋ฉด ๋ , ์, ์ผ, ์์ผ ๋ฑ ์๊ณ์ด๊ณผ ๊ด๋ จํ ๋ค์ํ column ์ ๋ง๋ค ์ ์๋ค. ํ์ง๋ง ์ด๋ ์๊ธฐ๋ ์์ผ์ 0, 1, 2โฆ6 ์ ํํ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๋ ๊ณผ์ ์์ ์ฐ๋ฆฌ๋ ์ต์ํ ํํ๋ก ๋ฐ๊พธ๋ ๊ฒฝ์ฐ๊ฐ ์์ฃผ ์๋ค. ๋จผ์ ๋ฐ์ดํฐํ๋ ์์ ํ๋ฒ ํ์ธํด๋ณด์.
birth_date['weekday'] = birth_date['date'].dt.weekday
birth_date.head()
>>
year month day births date weekday
0 1969 1 1 8486 1969-01-01 2
1 1969 1 2 9002 1969-01-02 3
2 1969 1 3 9542 1969-01-03 4
3 1969 1 4 8960 1969-01-04 5
4 1969 1 5 8390 1969-01-05 6
๋ธ๋ก๊ทธ์ ํ๋ค์ค ์ฐ์ตํ ํฌ์คํ ์ค์ ํ ๋ฐ์ดํฐ๋ฅผ ๊ธ์ด์๋ค.
์์ ๋ฐ์ดํฐํ๋ ์์์ ํ์ธํ ์ ์๋ฏ์ด ์์ผ์ ์๋ฏธํ๋ ์ด์ธ weekday ๊ฐ ์ซ์๋ก ์ ํ์๋ค. ๊ทธ๋ผ ์ด weekday๋ฅผ ์ต์ํ ํํ๋ก ๋จผ์ ๋ฐ๊ฟ์ฃผ์.
def weekday_func(row):
if row['weekday'] == 0:
row['weekday'] = 'Mon'
elif row['weekday'] == 1:
row['weekday'] = 'Tue'
elif row['weekday'] == 2:
row['weekday'] = 'Wed'
elif row['weekday'] == 3:
row['weekday'] = 'Thu'
elif row['weekday'] == 4:
row['weekday'] = 'Fri'
elif row['weekday'] == 5:
row['weekday'] = 'Sat'
elif row['weekday'] == 6:
row['weekday'] = 'Sun'
return row
birth_date = birth_date.apply(weekday_func, axis = 1)
birth_date.head()
>>
year month day births date weekday
0 1969 1 1 8486 1969-01-01 Wed
1 1969 1 2 9002 1969-01-02 Thu
2 1969 1 3 9542 1969-01-03 Fri
3 1969 1 4 8960 1969-01-04 Sat
4 1969 1 5 8390 1969-01-05 Sun
์ด์ ์ด ์น๊ตฌ๋ฅผ weekday ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํด๋ณด์.
birth_date = birth_date.sort_values('weekday', ascending = False)
birth_date
>>
year month day births date weekday
0 1969 1 1 8486 1969-01-01 Wed
6274 1985 7 3 11698 1985-07-03 Wed
6281 1985 7 10 11640 1985-07-10 Wed
2220 1974 10 16 9211 1974-10-16 Wed
2213 1974 10 9 9505 1974-10-09 Wed
... ... ... ... ... ... ...
1606 1973 3 9 9100 1973-03-09 Fri
6636 1986 6 27 11286 1986-06-27 Fri
5542 1983 7 22 11043 1983-07-22 Fri
1613 1973 3 16 8899 1973-03-16 Fri
4770 1981 7 3 9717 1981-07-03 Fri
7305 rows ร 6 columns
์ฐ๋ฆฌ์๊ฒ ์ต์ํ ์์์ผ๋ถํฐ ์ผ์์ผ๊น์ง ์ ๋ ฌ๋๋ ๋๋์ ์ํ๋๋ฐ, ์ ์คํจํ๋ค๐ .
์ด์ ๋ Categorical ํจ์๋ฅผ ์ฌ์ฉํด๋ณด๋๋ก ํ์.
birth_date['weekday'] = pd.Categorical(birth_date['weekday'], categories=['Mon','Tue','Wed','Thu','Fri','Sat','Sun'], ordered = True)
birth_date = birth_date.sort_values(['weekday', 'year'], ascending = True)
birth_date
>>
year month day births date weekday
198 1969 7 7 10634 1969-07-07 Mon
219 1969 7 28 10548 1969-07-28 Mon
189 1969 6 30 10588 1969-06-30 Mon
241 1969 8 18 10650 1969-08-18 Mon
234 1969 8 11 10706 1969-08-11 Mon
... ... ... ... ... ... ...
7226 1988 1 31 8515 1988-01-31 Sun
7369 1988 6 19 9038 1988-06-19 Sun
7282 1988 3 27 8534 1988-03-27 Sun
7311 1988 4 24 8485 1988-04-24 Sun
7275 1988 3 20 8646 1988-03-20 Sun
7305 rows ร 6 columns
๐ต ์ด์์ด๋ฉด ๋ ๋๋ ์์๋๋ก ๋ณด๊ณ ์ถ์ด์ year ์ weekday ๋ฅผ ๋์์ sort_values ํ๊ณ , ๊ฒฐ๊ณผ๋ ๋ณด๋ ๋ฐ์ ๊ฐ์ด ์ฑ๊ณต์ด๋ค๐. ํจ์ ๋ด์ ์ ๋ ฌ์ ์ํ๋ ์๋ฆฌ์ฆ์ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ง์ ํด์ฃผ๊ณ , ์ ๋ ฌ๊ฐ์ True ๋ฅผ ๋ฐฐ์ ํด์ ์ฌ์ฉํ๋ค. ๋ฌธ๋ฒ์ ์ดํด๋ณด๊ณ ๋๋ด๋๋ก ํ์.
๐ ํจ์ ๋ฌธ๋ฒ
pd . Categorical ( ์๋ฆฌ์ฆ, categories = [์นดํ ๊ณ ๋ฆฌ๋ฆฌ์คํธ], ordered = True )
ex1 ) Series = pd.Categorical(Series, categories = [โช, โช, โช],ordered = True)
ex2 ) birth_date['weekday'] = pd.Categorical(birth_date['weekday'], categories=['Mon','Tue','Wed','Thu','Fri','Sat','Sun'], ordered = True)
๐ต ๊ฐ๋ณ๊ฒ Categoical ํจ์์ ๋ํด์ ์ดํด๋ดค๋ค. ํจ์ ๋ด์ ์ผ์ผ์ด ์นดํ ๊ณ ๋ฆฌ ๋ฆฌ์คํธ๋ฅผ ์์์ง์ด ๋ฃ์ด์ค์ผํ๋ค๋ ์ ์ด ์ปค๋ค๋ ๋ฐ์ดํฐ ๋ถ์์ ์ฌ์ฉํ๊ธฐ์๋ ์ฝ๊ฐ ๊ฑธ๋ฆฌ์ง๋ง datetime ํจ์์ ์ฎ์ด์ ์ฌ์ฉํ ๋๋ ํจ์ฌ ๊น๋ํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค๊ณ ์๊ฐํ๋ค. ์ ๋ ฌ์ ํด๋ ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ์ ๋์ฌ๋๋ ์ด ํจ์๋ฅผ ์จ๋ณด๋ ๊ฑด ์ด๋จ๊น๐!!
Leave a comment