๋ชฉ์ฐจ
๋ชฉ์ฐจPandasSeries์ฐ์ ์ฐ์ฐ๋น๊ต ์ฐ์ฐ์์ง๊ณํจ์DataFrame๊ฒฐ์ธก๊ฐ ์ฒ๋ฆฌMultiIndex๋ฐ์ดํฐ ์ฌ์ ๋ถ์๊ฐ์ ์ฐ๊ฒฐ
ย
Pandas
- ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ ๋ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
- ํ๊ณผ ์ด์ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ํจ์๋ฅผ ์ ๊ณตํ๋ ๋๊ตฌ์ด๋ค.
โป ๊ฐ ์ด์ ๋จ์ผ ๋ฐ์ดํฐ ํ์๋ง ์ ์ฅ
- numpy๋ณด๋ค ์ ์ฐํ๊ฒ ์์น ์ฐ์ฐ ๊ฐ๋ฅํ๋ค.
์
๋ ฅ
import pandas as pd pd.__version__ pd? # tab ๋๋ฅด๋ฉด ์ฌ์ฉ๊ฐ๋ฅํ ์ฌ๋ฌ๊ฐ์ง method๋ฅผ ๋ณผ ์ ์๋ค.
ย
์ถ๋ ฅ
1.0.1
Series
- index์ values๋ก ์ด๋ฃจ์ด์ง 1์ฐจ์ ๋ฐฐ์ด์ด๋ค.
- ๋ชจ๋ ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ ํ ์ ์๋ค.
- ์ธ๋ฑ์ค๋ฅผ ์ง์ ํด ์ค ์ ์๋ค.
- ์ธ๋ฑ์ค ๊ธธ์ด๋ ๋ฐ์ดํฐ์ ๊ธธ์ด์ ๊ฐ์์ผ ํ๋ค.
- ๋ช ์์ ์ธ๋ฑ์ค์ ์๋ฌต์ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง๋ค.
- loc : ์ธ๋ฑ์ค๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋ค.
- iloc : ์ ์ ์ธ๋ฑ์ค์ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋ค.
์
๋ ฅ
import pandas as pd import numpy as np
data = np.arange(0, 50, 10) data
ย
์ถ๋ ฅ
array([ 0, 10, 20, 30, 40])
ย
์
๋ ฅ
a = pd.Series(data, index=['a', 'b', 'c', 'd', 'e']) print(a)
ย
์ถ๋ ฅ
a 0 b 10 c 20 d 30 e 40 dtype: int32
ย
์
๋ ฅ
b = pd.Series(data) b
ย
์ถ๋ ฅ
0 0 1 10 2 20 3 30 4 40 dtype: int32
ย
์
๋ ฅ
a['b']
ย
์ถ๋ ฅ
10
ย
์
๋ ฅ
a.loc['b']
ย
์ถ๋ ฅ
10
ย
์
๋ ฅ
a.iloc[1]
ย
์ถ๋ ฅ
10
ย
์ฐ์ ์ฐ์ฐ
์
๋ ฅ
a
ย
์ถ๋ ฅ
a 0 b 10 c 20 d 30 e 40 dtype: int32
ย
์
๋ ฅ
# ๋ํ๊ธฐ a + 10
ย
์ถ๋ ฅ
a 10 b 20 c 30 d 40 e 50 dtype: int32
ย
์
๋ ฅ
# ๋นผ๊ธฐ a - 10
ย
์ถ๋ ฅ
a -10 b 0 c 10 d 20 e 30 dtype: int32
ย
์
๋ ฅ
# ๊ณฑํ๊ธฐ a * 10
ย
์ถ๋ ฅ
a 0 b 100 c 200 d 300 e 400 dtype: int32
ย
์
๋ ฅ
# ๊ฑฐ๋ญ์ ๊ณฑ a ** 2
ย
์ถ๋ ฅ
a 0 b 100 c 400 d 900 e 1600 dtype: int32
ย
์
๋ ฅ
# ๋๋๊ธฐ a / 5
ย
์ถ๋ ฅ
a 0.0 b 2.0 c 4.0 d 6.0 e 8.0 dtype: float64
ย
์
๋ ฅ
# ๋ชซ a // 5
ย
์ถ๋ ฅ
a 0 b 2 c 4 d 6 e 8 dtype: int32
ย
์
๋ ฅ
# ๋๋จธ์ง a % 3
ย
์ถ๋ ฅ
a 0 b 1 c 2 d 0 e 1 dtype: int32
ย
๋น๊ต ์ฐ์ฐ์
์
๋ ฅ
a
ย
์ถ๋ ฅ
Out[-] a 0 b 10 c 20 d 30 e 40 dtype: int32
ย
์
๋ ฅ
a > 15
ย
์ถ๋ ฅ
a False b False c True d True e True dtype: bool
ย
์
๋ ฅ
a[a>15]
ย
์ถ๋ ฅ
c 20 d 30 e 40 dtype: int32
ย
์ง๊ณํจ์
- add : ๋ํ๊ธฐ ํจ์
- sub : ๋นผ๊ธฐ ํจ์
- mul : ๊ณฑํ๊ธฐ ํจ์
- div : ๋๋๊ธฐ ํจ์
- mod : ๋๋จธ์ง ๊ตฌํ๋ ํจ์
- min : ์ต์๊ฐ ๊ตฌํ๋ ํจ์
- max : ์ต๋๊ฐ ๊ตฌํ๋ ํจ์
- mean : ํ๊ท ๊ตฌํ๋ ํจ์
- median : ์ค์๊ฐ ๊ตฌํ๋ ํจ์
- std : ํ์คํธ์ฐจ ๊ตฌํ๋ ํจ์
- var : ๋ถ์ฐ ๊ตฌํ๋ ํจ์
์
๋ ฅ
a.add(100)
ย
์ถ๋ ฅ
a 100 b 101 c 102 d 103 e 104 dtype: int32
ย
์
๋ ฅ
a.sub(100)
ย
์ถ๋ ฅ
a -100 b -90 c -80 d -70 e -60 dtype: int32
ย
์
๋ ฅ
a.mul(100)
ย
์ถ๋ ฅ
a 0 b 1000 c 2000 d 3000 e 4000 dtype: int32
ย
์
๋ ฅ
a.div(100)
ย
์ถ๋ ฅ
a 0.0 b 0.1 c 0.2 d 0.3 e 0.4 dtype: float64
ย
์
๋ ฅ
a.mod(3)
ย
์ถ๋ ฅ
a 0 b 1 c 2 d 0 e 1 dtype: int32
ย
์
๋ ฅ
a.min()
ย
์ถ๋ ฅ
0
ย
์
๋ ฅ
a.max()
ย
์ถ๋ ฅ
40
ย
์
๋ ฅ
a.sum()
ย
์ถ๋ ฅ
100
ย
์
๋ ฅ
a.mean()
ย
์ถ๋ ฅ
Out[-] 20.0
ย
์
๋ ฅ
a.median()
ย
์ถ๋ ฅ
20.0
ย
์
๋ ฅ
a.std()
ย
์ถ๋ ฅ
15.811388300841896
ย
์
๋ ฅ
a.var()
ย
์ถ๋ ฅ
250.0
ย
DataFrame
- 2์ฐจ์ ๋ฐฐ์ด์ ํ๊ณผ ์ด์ ์ธ๋ฑ์ค๋ฅผ ๋ถ์ธ ๊ฒ์ด๋ค.
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ค.
์
๋ ฅ
# 50๋ถํฐ 100์ฌ์ด, 4x3ํํ๋ก ๋๋ค ์์ฑ rawData = np.random.randint(50, 100, size=(4, 3)) rawData
ย
์ถ๋ ฅ
array([[72, 61, 98], [83, 90, 91], [55, 71, 89], [71, 71, 76]])
ย
์
๋ ฅ
df = pd.DataFrame(rawData, index=['1๋ฐ', '2๋ฐ', '1๋ฐ', '2๋ฐ'], columns=['๊ตญ', '์', '์']) df
ย
์ถ๋ ฅ
๊ตญ ์ ์ 1๋ฐ 72 61 98 2๋ฐ 83 90 91 1๋ฐ 55 71 89 2๋ฐ 71 71 76
ย
์
๋ ฅ
#df[0] -> Error df['๊ตญ']
ย
์ถ๋ ฅ
1๋ฐ 72 2๋ฐ 83 1๋ฐ 55 2๋ฐ 71 Name: ๊ตญ, dtype: int32
ย
์
๋ ฅ
df
ย
์ถ๋ ฅ
๊ตญ ์ ์ 1๋ฐ 72 61 98 2๋ฐ 83 90 91 1๋ฐ 55 71 89 2๋ฐ 71 71 76
ย
์
๋ ฅ
# ์ด์ ์ถ๊ฐํ์ฌ ํ๊ท ๊ตฌํ๊ธฐ df['ํ๊ท '] = round((df['๊ตญ']+df['์']+df['์'])/3, 2) df
ย
์ถ๋ ฅ
๊ตญ ์ ์ ํ๊ท 1๋ฐ 72 61 98 77.00 2๋ฐ 83 90 91 88.00 1๋ฐ 55 71 89 71.67 2๋ฐ 71 71 76 72.67
ย
์
๋ ฅ
# ์ด('na') ์ถ๊ฐํ๊ณ NaN๊ฐ์ ๋ฃ๊ธฐ df["na"] = np.nan df
ย
์ถ๋ ฅ
๊ตญ ์ ์ ํ๊ท na 1๋ฐ 72 61 98 77.00 NaN 2๋ฐ 83 90 91 88.00 NaN 1๋ฐ 55 71 89 71.67 NaN 2๋ฐ 71 71 76 72.67 NaN
ย
์
๋ ฅ
# del ์ญ์ del df['na'] df
ย
์ถ๋ ฅ
๊ตญ ์ ์ ํ๊ท 1๋ฐ 72 61 98 77.00 2๋ฐ 83 90 91 88.00 1๋ฐ 55 71 89 71.67 2๋ฐ 71 71 76 72.67
ย
์
๋ ฅ
df[df.ํ๊ท > 75]
ย
์ถ๋ ฅ
๊ตญ ์ ์ ํ๊ท 1๋ฐ 72 61 98 77.0 2๋ฐ 83 90 91 88.0
ย
์
๋ ฅ
df = df.drop(["ํ๊ท "], axis = 'columns') df
ย
์ถ๋ ฅ
๊ตญ ์ ์ 1๋ฐ 72 61 98 2๋ฐ 83 90 91 1๋ฐ 55 71 89 2๋ฐ 71 71 76
ย
๊ฒฐ์ธก๊ฐ ์ฒ๋ฆฌ
- NaN
- ์๋ฃํ์ด Floatํ์ด๋ค.
- ๋ฐฐ์ด์์ ์ฐ์ฐํ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์ง๋ง ๊ฒฐ๊ณผ๊ฐ์ด NaN์ด ๋๋ค.
- None
- ์๋ฃํ์ด None์ด๋ค.
- ๋ฐฐ์ด ์ฐ์ฐ์ ํ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
3. ์ฒ๋ฆฌ๋ฐฉ๋ฒ
- isnull() : ๊ฒฐ์ธก๊ฐ ํ์ธ (๊ฒฐ์ธก ์ด๋ฉด True , ๊ฒฐ์ธก์ด ์๋๋ฉด False )
- notnull() : ๊ฒฐ์ธก๊ฐ ํ์ธ (๊ฒฐ์ธก ์ด๋ฉด False , ๊ฒฐ์ธก์ด ์๋๋ฉด True )
- dropna() : ๊ฒฐ์ธก๊ฐ ์ญ์
- inplace = True : dropํ ์๋ณธ์ ๋ฐ์
- fillna(Num) : ๊ฒฐ์ธก๊ฐ์ Num์ผ๋ก ์ฑ์ ๋ฃ๋๋ค.
์
๋ ฅ
df = df.astype('float64') # ํ์ ๋ณ๊ฒฝ df
ย
์ถ๋ ฅ
๊ตญ ์ ์ 1๋ฐ 72.0 61.0 98.0 2๋ฐ 83.0 90.0 91.0 1๋ฐ 55.0 71.0 89.0 2๋ฐ 71.0 71.0 76.0
ย
์
๋ ฅ
df['์'][2] = np.nan df
ย
์ถ๋ ฅ
๊ตญ ์ ์ 1๋ฐ 72.0 61.0 98.0 2๋ฐ 83.0 90.0 91.0 1๋ฐ 55.0 71.0 NaN 2๋ฐ 71.0 71.0 76.0
ย
์
๋ ฅ
df.dropna(axis=0) # inplace=True # axis=0 : ํ ์ญ์
ย
์ถ๋ ฅ
๊ตญ ์ ์ 1๋ฐ 72.0 61.0 98.0 2๋ฐ 83.0 90.0 91.0 2๋ฐ 71.0 71.0 76.0
ย
์
๋ ฅ
df
ย
์ถ๋ ฅ
๊ตญ ์ ์ 1๋ฐ 72.0 61.0 98.0 2๋ฐ 83.0 90.0 91.0 1๋ฐ 55.0 71.0 NaN 2๋ฐ 71.0 71.0 76.0
ย
์
๋ ฅ
df.dropna(axis=1) # axis=1 : ์ด ์ญ์
ย
์ถ๋ ฅ
๊ตญ ์ 1๋ฐ 72.0 61.0 2๋ฐ 83.0 90.0 1๋ฐ 55.0 71.0 2๋ฐ 71.0 71.0
ย
์
๋ ฅ
df.fillna('hello')
ย
์ถ๋ ฅ
๊ตญ ์ ์ 1๋ฐ 72.0 61.0 98 2๋ฐ 83.0 90.0 91 1๋ฐ 55.0 71.0 hello 2๋ฐ 71.0 71.0 76
ย
์
๋ ฅ
df.fillna(0) # 0์ผ๋ก ๋์ฒด
ย
์ถ๋ ฅ
๊ตญ ์ ์ 1๋ฐ 72.0 61.0 98.0 2๋ฐ 83.0 90.0 91.0 1๋ฐ 55.0 71.0 0.0 2๋ฐ 71.0 71.0 76.0
ย
์
๋ ฅ
df.fillna(df.mean()) # ํ๊ท ์ผ๋ก ๋์ฒด
ย
์ถ๋ ฅ
๊ตญ ์ ์ 1๋ฐ 72.0 61.0 98.000000 2๋ฐ 83.0 90.0 91.000000 1๋ฐ 55.0 71.0 88.333333 2๋ฐ 71.0 71.0 76.000000
ย
MultiIndex
- Index๋ฅผ ์ค์ ํ ๋ ๋ฆฌ์คํธ์ ๋ฆฌ์คํธ ํํ๋ก ๋ฃ์ด์ฃผ๋ฉด ๋ค์ค ์ธ๋ฑ์ค๊ฐ ์ค์ ์ด ๋๋ค.
์
๋ ฅ
df
ย
์ถ๋ ฅ
๊ตญ ์ ์ 1๋ฐ 72.0 61.0 98.0 2๋ฐ 83.0 90.0 91.0 1๋ฐ 55.0 71.0 NaN 2๋ฐ 71.0 71.0 76.0
ย
์
๋ ฅ
# index ์ columns์ ๋ฐ๊ฟ df.T
ย
์ถ๋ ฅ
1๋ฐ 2๋ฐ 1๋ฐ 2๋ฐ ๊ตญ 72.0 83.0 55.0 71.0 ์ 61.0 90.0 71.0 71.0 ์ 98.0 91.0 NaN 76.0
ย
์
๋ ฅ
df
๊ตญ ์ ์ 1๋ฐ 72.0 61.0 98.0 2๋ฐ 83.0 90.0 91.0 1๋ฐ 55.0 71.0 NaN 2๋ฐ 71.0 71.0 76.0
df.index = [['1ํ๋ ', '1ํ๋ ', '2ํ๋ ', '2ํ๋ '], ['1๋ฐ', '2๋ฐ', '1๋ฐ', '2๋ฐ']] df
ย
์ถ๋ ฅ
๊ตญ ์ ์ 1ํ๋ 1๋ฐ 72.0 61.0 98.0 2๋ฐ 83.0 90.0 91.0 2ํ๋ 1๋ฐ 55.0 71.0 NaN 2๋ฐ 71.0 71.0 76.0
ย
์
๋ ฅ
df.columns = [['์ธ์ด', '์ธ์ด', '์๋ฆฌ'],['๊ตญ', '์', '์']] df
ย
์ถ๋ ฅ
์ธ์ด ์๋ฆฌ ๊ตญ ์ ์ 1ํ๋ 1๋ฐ 72.0 61.0 98.0 2๋ฐ 83.0 90.0 91.0 2ํ๋ 1๋ฐ 55.0 71.0 NaN 2๋ฐ 71.0 71.0 76.0
ย
์
๋ ฅ
df['์ธ์ด']['๊ตญ']
ย
์ถ๋ ฅ
1ํ๋ 1๋ฐ 72.0 2๋ฐ 83.0 2ํ๋ 1๋ฐ 55.0 2๋ฐ 71.0 Name: ๊ตญ, dtype: float64
ย
์
๋ ฅ
df.iloc[0]
ย
์ถ๋ ฅ
์ธ์ด ๊ตญ 72.0 ์ 61.0 ์๋ฆฌ ์ 98.0 Name: (1ํ๋ , 1๋ฐ), dtype: float64
ย
์
๋ ฅ
df.loc['1ํ๋ ']
ย
์ถ๋ ฅ
์ธ์ด ์๋ฆฌ ๊ตญ ์ ์ 1๋ฐ 72.0 61.0 98.0 2๋ฐ 83.0 90.0 91.0
ย
์
๋ ฅ
df.loc['1ํ๋ '].loc['1๋ฐ']
ย
์ถ๋ ฅ
์ธ์ด ๊ตญ 72.0 ์ 61.0 ์๋ฆฌ ์ 98.0 Name: 1๋ฐ, dtype: float64
ย
๋ฐ์ดํฐ ์ฌ์ ๋ถ์
- info() : DataFrame์ ๊ตฌ์ฑํ๋ ํ๊ณผ ์ด์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋ด ์ฃผ๋ ํจ์
- head(n) : DataFrame์ ์ฒ์๋ถํฐ n์ค์ ํ์ ์ถ๋ ฅ
- tail(n) : DataFrame์ ๋ง์ง๋ง n์ค์ ํ์ ์ถ๋ ฅ
- describe() : Series, DataFrame์ ๊ฐ ์ด์ ๋ํ ์์ฝ ํต๊ณ
- dtypes : ๋ฐ์ดํฐ ์๋ฃํ ํ์ธ
์
๋ ฅ
df
ย
์ถ๋ ฅ
์ธ์ด ์๋ฆฌ ๊ตญ ์ ์ 1ํ๋ 1๋ฐ 72.0 61.0 98.0 2๋ฐ 83.0 90.0 91.0 2ํ๋ 1๋ฐ 55.0 71.0 NaN 2๋ฐ 71.0 71.0 76.0
ย
์
๋ ฅ
df.info()
ย
์ถ๋ ฅ
<class 'pandas.core.frame.DataFrame'> MultiIndex: 4 entries, (1ํ๋ , 1๋ฐ) to (2ํ๋ , 2๋ฐ) Data columns (total 3 columns): (์ธ์ด, ๊ตญ) 4 non-null float64 (์ธ์ด, ์) 4 non-null float64 (์๋ฆฌ, ์) 3 non-null float64 dtypes: float64(3) memory usage: 248.0+ bytes
ย
์
๋ ฅ
df.head()
ย
์ถ๋ ฅ
์ธ์ด ์๋ฆฌ ๊ตญ ์ ์ 1ํ๋ 1๋ฐ 72.0 61.0 98.0 2๋ฐ 83.0 90.0 91.0 2ํ๋ 1๋ฐ 55.0 71.0 NaN 2๋ฐ 71.0 71.0 76.0
ย
์
๋ ฅ
df.tail()
ย
์ถ๋ ฅ
์ธ์ด ์๋ฆฌ ๊ตญ ์ ์ 1ํ๋ 1๋ฐ 72.0 61.0 98.0 2๋ฐ 83.0 90.0 91.0 2ํ๋ 1๋ฐ 55.0 71.0 NaN 2๋ฐ 71.0 71.0 76.0
ย
์
๋ ฅ
df.dtypes
ย
์ถ๋ ฅ
์ธ์ด ๊ตญ float64 ์ float64 ์๋ฆฌ ์ float64 dtype: object
ย
์
๋ ฅ
df.describe()
ย
์ถ๋ ฅ
์ธ์ด ์๋ฆฌ ๊ตญ ์ ์ count 4.000000 4.000000 3.000000 mean 70.250000 73.250000 88.333333 std 11.528949 12.120919 11.239810 min 55.000000 61.000000 76.000000 25% 67.000000 68.500000 83.500000 50% 71.500000 71.000000 91.000000 75% 74.750000 75.750000 94.500000 max 83.000000 90.000000 98.000000
ย
์
๋ ฅ
df.isnull() # ๊ฒฐ์ธก๊ฐ ํ์ธ, ๊ฒฐ๊ณผ๋ bool ํํ๋ก ์ถ๋ ฅ
ย
์ถ๋ ฅ
์ธ์ด ์๋ฆฌ ๊ตญ ์ ์ 1ํ๋ 1๋ฐ False False False 2๋ฐ False False False 2ํ๋ 1๋ฐ False False True 2๋ฐ False False False
ย
์
๋ ฅ
df.isnull().sum() # ๊ฒฐ์ธก๊ฐ ๊ฐ์ ํ์ธ
ย
์ถ๋ ฅ
์ธ์ด ๊ตญ 0 ์ 0 ์๋ฆฌ ์ 1 dtype: int64
ย
๊ฐ์ ์ฐ๊ฒฐ
- concat : DataFrame๋ผ๋ฆฌ ๊ฒฐํฉ
- axis=0 or 1 : ์๋๋ก ๋ฐ์ดํฐ ์ฐ๊ฒฐ / ์์ผ๋ก ๋ฐ์ดํฐ ์ฐ๊ฒฐ
- append : ๋ง์ง๋ง ํ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ
โป concatenate : ๋ฐฐ์ด๋ผ๋ฆฌ ๊ฒฐํฉ
์
๋ ฅ
a = pd.DataFrame(np.arange(1, 10).reshape(3, 3)) a
ย
์ถ๋ ฅ
0 1 2 0 1 2 3 1 4 5 6 2 7 8 9
ย
์
๋ ฅ
b = pd.Series(np.arange(10, 40, 10)) b
ย
์ถ๋ ฅ
0 10 1 20 2 30 dtype: int32
ย
์
๋ ฅ
pd.concat([a, b], axis=1)
ย
์ถ๋ ฅ
0 1 2 0 0 1 2 3 10 1 4 5 6 20 2 7 8 9 30
ย
์
๋ ฅ
pd.concat([a, b], axis=1, ignore_index=True)
ย
์ถ๋ ฅ
0 1 2 3 0 1 2 3 10 1 4 5 6 20 2 7 8 9 30
ย
์
๋ ฅ
a.append(b, ignore_index=True)
ย
์ถ๋ ฅ
0 1 2 0 1 2 3 1 4 5 6 2 7 8 9 3 10 20 30