240514 Today I Learn
Data Selection
Getitem [ ]
๐ก dataframe['์ปฌ๋ผ๋ช ']
DataFrame์์๋ column์ ์ง์ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ํํ ์ ์๋ค. ์ ํ๋ ๋ฐ์ดํฐ๋ series ํํ๋ก ๋ฐํ๋๋ค.
- ์์
- ์ฌ๋ผ์ด์ฑ์ ์ด์ฉํด ์ถ์ถ ๊ฐ๋ฅ
# ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ์ ์ถ๋ ฅํ๋ ๋ ์ฝ๋
df[0:3]
df["20240513":"20240515"]
-
- ์ซ์๋ก ์ฌ๋ผ์ด์ฑ ํ๋ ๊ฒฝ์ฐ [์์ํ ์ซ์ : ๋๋ ์ซ์ +1]
- ๋ฌธ์๋ก ์ฌ๋ผ์ด์ฑ ํ๋ ๊ฒฝ์ฐ [์์ํ ๋ฌธ์ : ๋๋ ๋ฌธ์]
Selection by label
๐ก loc : ๋ผ๋ฒจ๋ช ์ผ๋ก ์์น๋ฅผ ์ง์ ํ์ฌ ๋ฐ์ดํฐ ์ถ์ถ
- ํน์ row๋ฅผ ๋งค์นญํด ์ถ์ถํ๋ ๊ฒฝ์ฐ
# dates[0] = '2024-05-13'
# row ๊ฐ์ด 2024-05-13์ธ ํ ์ถ์ถ
df.loc[dates[0]]
## A 0.491729
## B -0.344907
## C -0.360853
## D 1.094950
## Name: 2024-05-13 00:00:00, dtype: float64
- ์ ํํ ์นผ๋ผ์์ ๋ชจ๋ row๋ฅผ ์ถ์ถํ๋ ๊ฒฝ์ฐ
# ๋ชจ๋ ํ์ 'A', 'B' ์นผ๋ผ์ ์ถ์ถ
df.loc[:, ["A", "B"]]
- ์ฌ๋ผ์ด์ฑ
df.loc["20240513":"20240515", ["A", "B"]]
→ 20240513, 20240515 ์๋ฆฌ์ dates[0], dates[2]๊ฐ ๋ค์ด๊ฐ ์ ์์. ๋จ (0, 2) ์ ๊ฐ์ ์ ์ํ ์ธ๋ฑ์ค๋ X
- ํ๊ฐ์ ๊ฐ๋ง ์ถ์ถํ๋ ๊ฒฝ์ฐ → ์ฌ๋งํ๋ฉด at ์ฌ์ฉํ๊ธฐ
df.loc['2024-05-13', 'A']
## df.loc['2024-05-13', 'A']
๐ก at: ๋ผ๋ฒจ๋ช ์ผ๋ก ์์น๋ฅผ ์ง์ ํ์ฌ ํ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ๋ ์ฉ์ด
df.at['2024-05-13', 'A']
## df.at['2024-05-13', 'A']
Selection by position
๐ก iloc : ์ ์๋ก ์์น๋ฅผ ์ง์ ํ์ฌ ๋ฐ์ดํฐ ์ถ์ถ
- ์ ์๋ก ์์น๋ฅผ ์ง์ ํ์ฌ ๋ฐ์ดํฐ ์ถ์ถ
df.iloc[3]
## A -0.173435
## B -0.813897
## C 0.248284
## D -1.714577
## Name: 2024-05-16 00:00:00, dtype: float64
- ์ฌ๋ผ์ด์ฑ
df.iloc[3:5, 0:2]
→ 3-4๋ฒ์งธ ํ, 0-1๋ฒ์งธ ์ปฌ๋ผ ์ฌ๋ผ์ด์ฑ ํด ์ถ์ถํ๊ธฐ
df.iloc[3:5]
→ 3-4๋ฒ์งธํ ์ถ์ถํ๊ธฐ(์ด์ ๊ฐ์ด ๋ชจ๋ ์ปฌ๋ผ์ ๋ถ๋ฌ์ค๊ณ ์ถ์ ๋์๋ ๋ณ๋๋ก ์ง์ ํด๋์ง ์์๋ ๋จ)
df.iloc[:,0:2]
→ ๋ฐ๋ฉด ๋ชจ๋ ํ์ ์ฒซ๋ฒ์งธ ๋๋ฒ์งธ ์ปฌ๋ผ๋ง ์ฌ๋ผ์ด์ฑ ํ๊ณ ์ถ๋ค๋ฉด ์์ ๊ฐ์ด ํ ์ ์์.
→ ๊ฐ์ ์
๋ ฅํ์ง ์์ ์ฝ๋ก (:)๊ณผ ์ฝค๋ง(,)๋ฅผ ๋ฃ์ด์ฃผ์ด์ผ '์ปฌ๋ผ'์ ์ฌ๋ผ์ด์ฑ ํ ์ ์์.
- ๋ฆฌ์คํธ๋ก ์์น๋ฅผ ์ง์ ํด ๋ฐ์ดํฐ ์ถ์ถ
df.iloc[[1, 2, 4], [0, 2]]
- ํ๊ฐ์ ๊ฐ๋ง ์ถ์ถํ๋ ๊ฒฝ์ฐ→ ์ฌ๋งํ๋ฉด iat ์ฌ์ฉํ๊ธฐ
df.iloc[1,1]
## 0.39981191278183553
๐ก iat: ์ ์๋ก ์์น๋ฅผ ์ง์ ํ์ฌ ํ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ๋ ์ฉ์ด
df.iat[1, 1]
## 0.39981191278183553
Boolean Indexing
- ๋ถ๋ฆฌ์ธ ์ธ๋ฑ์ฑ : ์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ ์ฌ๋ผ์ด์ฑ ํ๋ ๊ฒ
- ์์ 1) ๋ฐ์ดํฐ ์ฌ๋ผ์ด์ฑํ๊ธฐ (์ํ๋ ๊ฐ๋ง ์ถ์ถ)
# A ๊ฐ๋ค์ด 0๋ณด๋ค ํฐ ๋ฐ์ดํฐ๋ค์ ์ ํ
df[df["A"] > 0.1]
- ์์ 2) ์กฐ๊ฑด์ ์ถฉ์กฑํ๋์ง ํ์
# ์กฐ๊ฑด : df์์ ๋ฐ์ดํฐ๊ฐ 0๋ณด๋ค ํฐ ๊ฒฝ์ฐ
df[df>0]
๐ก ์ ์ฉํ ํํฐ๋ง ํจ์ isin()
๋ฐ์ดํฐ ํ๋ ์/ ์๋ฆฌ์ฆ์์ ํน์ ๊ฐ์ด ์๋์ง ์๋์ง ๋ถ๋ฆฌ์ธ ํํ๋ก ํ๋ณํ๋ ํจ์
# df2์ ์ปฌ๋ผ 'E'์ 'two', 'four'๋ฅผ ๊ฐ์ผ๋ก ๊ฐ์ง๋ ํ์ ์ถ์ถํ๋ผ
df2[df2['E'].isin(['two','four'])]
Missing value Handling
๐ก ๊ฒฐ์ธก๊ฐ์ ์ฒ๋ฆฌํ๋ ๋๊ฐ์ง ๋ฐฉ๋ฒ
1. ๊ฒฐ์ธก์น๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ
- ์ฅ์ : ๊ฐ๋จํ๊ณ , ๋ฐ์ดํฐ ์๊ณก์ด ์์
- ๋จ์ : ๋ฐ์ดํฐ ์๊ฐ ์ค์ด๋ฌ (๋จธ์ ๋ฌ๋, ๋ฅ๋ฌ๋์ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์)
2. ๋์ฒด๊ฐ์ ์ฑ์ ๋ฃ๋ ๊ฒ(๋ณด๊ฐ๋ฒ)
- ์ฅ์ : ๋ฐ์ดํฐ ์๋ฅผ ์ ์งํ ์ ์์
- ๋จ์ : ๋ฐ์ดํฐ๊ฐ ์๊ณก๋ ์ ์์ → ์ฌ๋ฐ๋ฅธ ๋์ฒด๊ฐ(ํ๊ท , ์ค์๊ฐ, 0)์ ๋ฃ์ด์ค์ผํจ
0. ๊ฒฐ์ธก ๊ฐ ๊ณ์ฐํ๊ธฐ
- df.isna()๋ฅผ ์ด์ฉํ๋ฉด ๋ถ๋ฆฌ์ธ ํํ๋ก nan์ธ์ง ์๋์ง ํ์ ๊ฐ๋ฅ
์ง๊ณํจ์ sum์ ์ด์ฉํ๋ฉด ์ด ๊ฒฐ์ธก๊ฐ์ ๊ณ์ฐํ ์ ์์
- ์ปฌ๋ผ๋ณ ๊ฒฐ์ธก๊ฐ์ ์ ๊ณ์ฐํ๊ธฐ
df1.isna().sum()
## A 0
## B 0
## C 0
## D 4
## E 1
## dtype: int64
- ํ๋ณ ๊ฒฐ์ธก๊ฐ์ ์ ๊ณ์ฐํ๊ธฐ
df1.isna().sum(axis = 1)
## 2024-05-13 1
## 2024-05-14 1
## 2024-05-15 1
## 2024-05-16 2
## Freq: D, dtype: int64
1. ๋๋ฝ๋ ํ์ ์ญ์ ํ๊ธฐ
๐ก df.dropna(how = 'any'/ 'all', axis = 0)
- how
- all : ๋ชจ๋ ์ปฌ๋ผ๊ณผ row๊ฐ nan์ด์ด์ผ ์ญ์
- any : ์ปฌ๋ผ ๋๋ row๊ฐ nan์ธ ๊ฒฝ์ฐ ์ญ์
- axis
- 0 : ํ
- 1 : ์ด
- df.dropna(how='all')
df1.dropna(how="all")
→ ์นผ๋ผ๊ณผ ํ ๋ชจ๋ nan ๊ฐ์ธ ๋ง์ง๋ง ํ(2024-05-16)์ ์ญ์
- df.dropna(how='any')
df1.dropna(how="any", axis = 1)
→ ์นผ๋ผ ๋๋ ํ์ด ๊ฒฐ์ธก๊ฐ์ธ ์ปฌ๋ผ D, E๋ฅผ ์ญ์ ํจ
2. ๊ฒฐ์ธก๊ฐ์ ์๋ก์ด ๊ฐ์ผ๋ก ์ฑ์ฐ๊ธฐ
๐ก df.fillna(value = '์ฑ์ธ ๊ฐ')
๊ฒฐ์ธก๊ฐ์ ์๋ก์ด ๊ฐ์ผ๋ก ์ฑ์ฐ๊ธฐ
df1.fillna(value=0)
→ D์ E์ ์๋ NaN๊ฐ์ ๋ชจ๋ 1๋ก ๋์ฒด