ํ๊ทธ๊ฐ ๋ถ์
pandas.read_html('์น์ฃผ์ url')
pandas.read_html('ํ์ผ๊ฒฝ๋ก/ํ์ผ๋ช
.html')
๋ฐ์ดํฐ ์ดํด๋ณด๊ธฐ
๊ฐ ์ด์ ๊ฐ์
count() ๋ฉ์๋๋ ๋ฐ์ดํฐํ๋ ์์ ๊ฐ ์ด์ด ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ ๊ฐ์๋ฅผ ์๋ฆฌ์ฆ ๊ฐ์ฒด๋ก ๋ฐํํ๋ค.
๋ฐ์ดํฐํ๋ ์.count() --> ๋ฐ์ดํฐํ๋ ์์ ์ด๋ฃจ๊ณ ์๋ ์ด์ ๊ฐ์๋ฅผ ์๋ฆฌ์ฆ ๊ฐ์ฒด๋ก ๋ฐํํ๋ค.
๊ฐ ์ด์ ๊ณ ์ณ๊ฐ ๊ฐ์
value_counts() ๋ฉ์๋๋ ์๋ฆฌ์ฆ ๊ฐ์ฒด์ ๊ณ ์ณ๊ฐ ๊ฐ์๋ฅผ ์ธ๋๋ฐ ์ฌ์ฉํ๋ค.
dropna=True ์ต์
์ ์ฌ์ฉํ๋ฉด nan๊ฐ์ ์ ์ธํ๊ณ ์ซ์๋ฅผ ์ผ๋ค.
dropna=False๊ฐ ๊ธฐ๋ณธ๊ฐ์ด๋ค.
๋ฐ์ดํฐํ๋ ์["์ด์ด๋ฆ"].value_counts()
import pandas as pd
import numpy as np
data = { "A" : [ 1 , 2 , 3 , 4 , 5 ] , "B" : [ 3 , 59 , 30 , 1 , 2 ] , "C" : [ "dw" , "vc" , "qw" , "bb" , "ll" ] }
df = pd. DataFrame( data)
5 1
4 1
3 1
2 1
1 1
Name: A, dtype: int64
ํต๊ณ ํจ์ ์ ์ฉ
ํ๊ท ๊ฐ
๋ฐ์ดํฐํ๋ ์์ mean()๋ฉ์๋๋ฅผ ์ ์ฉํ๋ฉด, ์ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ ๋ชจ๋ ์ด์ ํ๊ท ๊ฐ์ ๊ฐ๊ฐ ๊ณ์ฐํ์ฌ ์๋ฆฌ์ฆ ๊ฐ์ฒด๋ก ๋ฐํํ๋ค.
df.mean() df์ ์ด ํ๊ท ์ ๊ณ์ฐ
df["์ด์ด๋ฆ"].mean() ์ ํ ๋ฐ์ ์ด์ ํ๊ท ๊ณ์ฐ.
์ค๊ฐ๊ฐ
๋ฐ์ดํฐํ๋ ์์ median()๋ฉ์๋๋ฅผ ์ ์ฉํ๋ฉด, ์ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ ๋ชจ๋ ์ด์ ์ค๊ฐ๊ฐ์ ๊ฐ๊ฐ ๊ณ์ฐํ์ฌ ์๋ฆฌ์ฆ ๊ฐ์ฒด๋ก ๋ฐํํ๋ค.
๋ฐ์ดํฐํ๋ ์์ ํน์ ์ด์ ์ ํํ์ฌ ์ค๊ฐ ๊ฐ์ ๊ณ์ฐํ ์๋ ์๋ค.
df.median()
df["์ด์ด๋ฆ"].median()
์ต๋๊ฐ
๋ฐ์ดํฐํ๋ ์์ max() ๋ฉ์๋๋ฅผ ์ ์ฉํ๋ฉด ๋ฐ์ดํฐํ๋ ์์ ๊ฐ ์ด์ด ๊ฐ๋ ๋ฐ์ดํฐ๊ฐ ์ค์์ ์ต๋๊ฐ์ ๊ณ์ฐํ์ฌ ์๋ฆฌ์ฆ๋ก ๋ฐํํ๋ค. \
ํน์ ์ด์ ์ ์ฑ
ํ์ฌ ๊ณ์ฐํ ์๋ ์๋ค.
๋ฌธ์์ด ๋ฐ์ดํฐ๋ ์์คํค์ฝ๋๋ก ํฌ๊ณ ์์์ ๋น๊ตํ๋ค.
๋ชจ๋ ์ด์ ์ต๋๊ฐ: df.max()
ํน์ ์ด์ ์ต๋๊ฐ: df["์ด ์ด๋ฆ"].max()
A
B
C
0
1
3
dw
1
2
59
vc
2
3
30
qw
3
4
1
bb
4
5
2
ll
A 5
B 59
C vc
dtype: object
์ต์๊ฐ
๋ฐ์ดํฐํ๋ ์์ min() ๋ฉ์๋๋ฅผ ์ ์ฉํ๋ฉด ๋ฐ์ดํฐํ๋ ์์ ๊ฐ ์ด์ด ๊ฐ๋ ๋ฐ์ดํฐ๊ฐ ์ค์์ ์ต์๊ฐ์ ๊ณ์ฐํ์ฌ ์๋ฆฌ์ฆ ํํ๋ก ๋ฐํํ๋ค.
ํน์ ์ด์ ๊ณ์ฐํ ์๋ ์๋ค.
๋ฌธ์์ด ๋ฐ์ดํฐ๋ ์์คํค์ฝ๋๋ก ํฌ๊ณ ์์์ ๊ณ์ฐํ๋ค.
๋ชจ๋ ์ด์ ์ต์๊ฐ: ๋ฐ์ดํฐํ๋ ์๊ฐ์ฒด.min()
ํน์ ์ด์ ์ต์๊ฐ: ๋ฐ์ดํฐํ๋ ์๊ฐ์น["์ด๊ฐ"].min()
ํ์คํธ์ฐจ
๋ฐ์ดํฐํ๋ ์์ std() ๋ฉ์๋๋ฅผ ์ ์ฉํ๋ฉด ์ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ ์ด์ ํ์คํธ์ฐจ๋ฅผ ๊ณ์ฐํ์ฌ ์๋ฆฌ์ฆ๋ก ๋ฐํํ๋ค.
ํน์ ์ด๋ง ๊ณ์ฐํ ์๋ ์๋ค.
๋ฌธ์์ด ๋ฐ์ดํฐ๋ ๋น๊ตํ์ง ์๋๋ค.
df.std()
df["์ด์ด๋ฆ"].std()
์๊ด๊ณ์
๋ฐ์ดํฐํ๋ ์์ corr()๋ฉ์๋๋ฅผ ์ ์ฉํ๋ฉด ๋ ์ด๊ฐ์ ์๊ด๊ณ์๋ฅผ ๊ณ์ฐํ๋ค.
์ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ ๋ชจ๋ ์ด์ ๋ํด 2๊ฐ์ฉ ์๋ก ์ง์ ์ง๊ณ , ๊ฐ๊ฐ์ ๊ฒฝ์ฐ์ ๋ํ์ฌ ์๊ด๊ณ์๋ฅผ ๊ณ์ฐํ๋ค.
๋ฌธ์์ด ๋ฐ์ดํฐ๋ ๊ณ์ฐ์ด ๋ถ๊ฐ๋ฅํ๊ธฐ๋๋ฌธ์ ํฌํจํ์ง ์๋๋ค.
df.corr()
df.[["์ด์ด๋ฆ","์ด์ด๋ฆ]].corr()
A
B
A
1.000000
-0.372822
B
-0.372822
1.000000
A
B
A
1.000000
-0.372822
B
-0.372822
1.000000
ํ๋ค์ค ๋ด์ฅ ๊ทธ๋ํ ๋๊ตฌ ํ์ฉ
์๋ฆฌ์ฆ ๋๋ ๋ฐ์ดํฐํ๋ ์ ๊ฐ์ฒด์ plot()๋ฉ์๋๋ฅผ ์ ์ฉํ์ฌ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆฐ ๋ค, kind ์ต์
์ผ๋ก ์ข
๋ฅ๋ฅผ ์ ํํ๋ค.
kind ์ต์
์ค๋ช
kind ์ต์
์ค๋ช
'line'
์ ๊ทธ๋ํ
'kde'
์ปค๋ ๋ฐ๋ ๊ทธ๋ํ
'bar'
์์ง ๋ง๋ ๊ทธ๋ํ
'area'
๋ฉด์ ๊ทธ๋ํ
'barh'
์ํ ๋ง๋ ๊ทธ๋ํ
'pie'
ํ์ด ๊ทธ๋ํ
'his'
ํ์คํ ๊ทธ๋จ
'scatter'
์ฐ์ ๋ ๊ทธ๋ํ
'box'
'๋ฐ์ค ๊ทธ๋ํ'
'hexbin'
๊ณ ๋ฐ๋ ์ฐ์ ๋ ๊ทธ๋ํ
์ ๊ทธ๋ํ
๋ฐ์ดํฐํ๋์ ๊ฐ์ฒด์ plot()๋ฉ์๋๋ฅผ ์ ์ฉํ ๋ ๋ค๋ฅธ ์ต์
์ ์ถ๊ฐํ์ง ์์ผ๋ฉด ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆฐ๋ค.
์ ๊ทธ๋ํ: ๋ฐ์ดํฐํ๋ ์๊ฐ์ฒด.plot()
๋ง๋ ๊ทธ๋ํ
plot()๋ฉ์ค๋ ์์ kind="bar"์ต์
์ ์ถ๊ฐํ๋ค.
๋ง๋๊ทธ๋ํ : ๋ฐ์ดํฐํ๋ ์๊ฐ์ฒด.plot(kind="bar")
ํ์คํ ๊ทธ๋จ
plot()๋ฉ์๋ ์์ kind="hist"์ต์
์ ์ถ๊ฐํ๋ค
ํ์คํ ๊ทธ๋จ: ๋ฐ์ดํฐํ๋ ์๊ฐ์ฒด.plot(kind="hist")
<matplotlib.axes._subplots.AxesSubplot at 0x11910b7d0>
์ฐ์ ๋
df.plot(x="ํน์ ์ด", y="ํน์ ์ด", kind="scatter")
df. plot( x= 'A' , y= 'B' , kind= "scatter" )
<matplotlib.axes._subplots.AxesSubplot at 0x11a2fb250>
๋ฐ์คํ๋กฏ
plot()๋ฉ์๋ ์์ kind="box"์ต์
์ ์
๋ ฅํ๋ค.
๋ฐ์คํ๋กฏ์ ํตํด 'o'ํ์๋ฅผ ํตํด ์ด์๊ฐ์ ํ์ธํ ์ ์๋ค.
๋ฐ์คํ๋กฏ: ๋ฐ์ดํฐํ๋ ์['์ด ์ด๋ฆ'.'์ด ์ด๋ฆ', ~].plot(kind="box")
์ด๋ ํ๋๋ง ๋ณด๊ณ ์ถ๋ค๋ฉด ๋ฐ์ดํฐํ๋ ์์ ์ปฌ๋ผ์ ํ๋๋ง ์ง์ ํ๋ฉด ๋๋ค.
์๊ฐํ ๋๊ตฌ
Matplotlib - ๊ธฐ๋ณธ ๊ทธ๋ํ ๋๊ตฌ
์ ๊ทธ๋ํ
- ์ ๊ทธ๋ํ๋ ์ฐ์ํ๋ ๋ฐ์ดํฐ ๊ฐ๋ค์ ์ง์ ๋๋ ๊ณก์ ์ผ๋ก ์ฐ๊ฒฐํ์ฌ ๋ฐ์ดํฐ ๊ฐ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๋ํ๋ธ๋ค
- ํนํ ์๊ณ์ด ๋ฐ์ดํฐ์ ๊ฐ์ด ์ฐ์์ ์ธ ๊ฐ์ ๋ณํ์ ํจํด์ ํ์
ํ๋๋ฐ ์ ํฉํ๋ค.
- ์ ๊ทธ๋ํ๋ ๊ธฐ๋ณธ ์ต์
์ด๊ธฐ ๋๋ฌธ์ ์ต์
์ ์ค์ ํ์ง ์๊ณ plot ํจ์๋ฅผ ์ฐ๋ฉด ์ ๊ทธ๋ํ๊ฐ ๋์จ๋ค.
1. ์คํ์ผ ์์ ์ง์
plt.style.use('ggplot')
2. ๊ทธ๋ฆผ ์ฌ์ด์ฆ ์ง์
plt.figure(figsize=(๊ฐ๋ก์ซ์,์ธ๋ก์ซ์))
3. x์ถ, y์ถ ๋ฐ์ดํฐ๋ฅผ plot ํจ์์ ์
๋ ฅ --> ์๋ฆฌ์ฆ์ ์ธ๋ฑ์ค๋ฅผ x์ถ ๋ฐ์ดํฐ๋ก, ๋ฐ์ดํฐ๊ฐ์ y์ถ๋ฐ์ดํฐ๋ก ์ ๋ฌ
plt.plot(x์ถ, y์ถ, marker="์ง์ ์ํ๋ฒณ", markersize=์ซ์์
๋ ฅ)
#ํ๋ค์ค ๊ฐ์ฒด ์์ฒด๋ฅผ plotํจ์์ ์
๋ ฅํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
4. ๊ทธ๋ํ ๊ฐ์ฒด์ ์ฐจํธ ์ ๋ชฉ์ ์ถ๊ฐํ ๋ title()ํจ์๋ฅผ ์ด์ฉํ๋ค.
plt.title("์ ๋ชฉ ์
๋ ฅ", size=์ซ์)
5. ์ถ ์ด๋ฆ ์ถ๊ฐ
plt.xlabel("x์ถ ์ด๋ฆ", size=์ซ์)
plt.ylabel("y์ถ ์ด๋ฆ", size=์ซ์)
6. matplotlib ํ๊ธ ๋ฌธ์ ํด๊ฒฐ --> ํด๋น ์ฝ๋๋ฅผ ๊ทธ๋๋ก ์ฐ๋ฉด ๋๋ค.
from matplotlib import font_manager, rc
font_path = "./ํฐํธํ์ผ์์น/ํฐํธ.ttf"
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font_name)
7. x์ถ, y์ถ ๋ฒ์ ์ง์ (์ต์๊ฐ, ์ต๋๊ฐ)
plt.xlim(์ต์๊ฐ, ์ต๋๊ฐ)
plt.ylim(์ต์๊ฐ, ์ต๋๊ฐ)
8. x์ถ ๋๊ธ ๋ผ๋ฒจ ํ์ / vertical ๋์ ์ซ์๋ฅผ ์
๋ ฅํด๋ ๋๋ค.
plt.xsticks(rotation= "vertical")
9. ๋ฒ๋กํ์ / best๋ ์ต์ ์ ์์น๋ฅผ ์ ์ ํด์ฃผ๋ ์๋๊ธฐ๋ฅ์ด๋ค.
plt.legend(labels=["๋ฒ๋ก ์ด๋ฆ"], loc="best", fontsize=์ซ์)
10. ๊ทธ๋ํ ์ถ๋ ฅ
plt.show()
๋ฐ์ดํฐ ์ฌ์ ์ฒ๋ฆฌ
๋๋ฝ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
- ์ ํจํ ๋ฐ์ดํฐ ๊ฐ์ด ์กด์ฌํ์ง ์๋ ๋๋ฝ ๋ฐ์ดํฐ๋ฅผ NaN์ผ๋ก ํ์ํ๋ค.
- ๋๋ฝ ๋ฐ์ดํฐ ํ์ธ
- df.info()๋ฉ์๋๋ก ๋ฐ์ดํฐํ๋ ์ ์์ฝ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ฉด NaN ๊ฐ์ ๊ฐ์๋ฅผ ๋ณด์ฌ์ค๋ค.
- df["์ด"].value_counts() ๋ฉ์๋๋ก ํน์ ์ด์ ๋๋ฝ ๋ฐ์ดํธ๋ฅด ํ์ธํ ์ ์๋ค.
- ์ด๋ ๋๋ฝ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ํ์ธํ๋ ค๋ฉด ๋ฐ๋์ dropna = False๋ผ๋ ์ต์
์ ์ ์ฉํด์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด NaN๊ฐ์ ์ ์ธํ๊ณ ์ ์ํ ๋ฐ
์ดํฐ ๊ฐ์๋ง์ ๊ตฌํ๋ค.
- df.isnull()๋ฉ์๋์ notnull()๋ฉ์๋๋ฅผ ํตํด ์ง์ ์ ์ผ๋ก ๋๋ฝ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ์ ์๋ค.
- isnull(): ๋๋ฝ๋ฐ์ดํฐ๋ผ๋ฉด True ๋ฐํ, ์ ํจํ ๋ฐ์ดํฐ๋ฉด False๋ฅผ ๋ฐํ
- notnull(): ์ ํจํ ๋ฐ์ดํฐ๋ฉด True ๋ฐํ, ๋๋ฝ ๋ฐ์ดํฐ๋ฉด False๋ฅผ ๋ฐํ
- ์ด๋ True๋ 1๋ก ๊ณ์ฐ๋๊ณ False๋ 0์ผ๋ก ํ๋ณ๋๊ธฐ ๋๋ฌธ์, sum(axis=0) ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ True(1)์ ํฉ์ ๊ตฌํ ์ ์๋ค.
- print(df.head().isnull().sum(axis=0))
๋๋ฝ ๋ฐ์ดํฐ ์ ๊ฑฐ
- dropna() ๋ฉ์๋๋ฅผ ์ ์ฉํด NaN ๊ฐ์ ๊ฐ๋ ํ ๋๋ ์ด์ ์ญ์ ํ ์ ์๋ค.
- subset์ต์
์ผ๋ก ์ด์ ํ์ ํ ์ ์๋ค.
- how ์ต์
์ผ๋ก NaN๊ฐ์ ๋ฐ๋ผ ์ญ์ ์กฐ๊ฑด์ ์ค ์ ์๋ค.
- ๋๋ฝ ๋ฐ์ดํฐ ์ญ์ (๊ธฐ์ค์ ): ๋ฐ์ดํฐํ๋ ์๊ฐ์ฒด.dropna(axis=0 ๋๋ 1, thresh=n)
- ๋๋ฝ ๋ฐ์ดํฐ ์ญ์ (์กฐ๊ฑด): ๋ฐ์ดํฐํ๋ ์๊ฐ์ฒด.dropna(subset=['์ด ์ด๋ฆ'], how='any' or 'all', axis =0 ๋๋ 1)
์ด๋ n์ ๊ฒฐ์ธก์น๊ฐ n๊ฐ ์ด์์ธ ํ ๋๋ ์ด์ ์ญ์ ํ๋ผ๋ ๊ธฐ์ค์ ์ ์ฃผ๋ ๊ฒ์ด๋ค.
how ์ต์
์ any๋ NaN๊ฐ ํ๋๋ผ๋ ์กด์ฌํ๋ ํ ๋๋ ์ด์ ์ญ์ ํ๋ผ๋ ์๋ฏธ๊ณ , all์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ NaN์ธ ๊ฒฝ์ฐ์๋ง ์ญ์ ํ๋ผ๋ ์๋ฏธ๋ค.
import seaborn as sns
df = sns. load_dataset( 'titanic' )
missing_df = df. isnull( )
for col in missing_df. columns:
missing_count = missing_df[ col] . value_counts( )
try :
print ( col, ":" , missing_count[ True ] )
except :
print ( col, ":" , 0 )
survived : 0
pclass : 0
sex : 0
age : 177
sibsp : 0
parch : 0
fare : 0
embarked : 2
class : 0
who : 0
adult_male : 0
deck : 688
embark_town : 2
alive : 0
alone : 0
df_thres = df. dropna( axis= 1 , thresh= 500 )
Index(['survived', 'pclass', 'sex', 'age', 'sibsp', 'parch', 'fare',
'embarked', 'class', 'who', 'adult_male', 'embark_town', 'alive',
'alone'],
dtype='object')
891๋ช
์ ์น๊ฐ์ค์์ 177๋ช
์ ๋์ด์ ๋ํ ๋ฐ์ดํฐ๊ฐ ์๋ค. ์น๊ฐ์ ๋์ด๊ฐ ๋ฐ์ดํฐ ๋ถ์์ ์ค์ํ ๋ณ์๋ผ๋ฉด, ๋์ด ๋ฐ์ดํฐ๊ฐ ์๋ ์น๊ฐ์ ๋ ์ฝ๋(ํ)๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข๋ค. dropna() ๋ฉ์๋์ subset์ 'age'์ด๋ก ํ์ ํ๋ฉด 'age'์ด์ ํ ์ค์์ NaN๊ฐ์ด ์๋ ๋ชจ๋ ํ(axis=0)์ ์ญ์ ํ๋ค. ๊ธฐ๋ณธ๊ฐ์ผ๋ก how="any" ์ต์
์ด ์ ์ฉ๋๋๋ฐ, NaN๊ฐ์ด ํ๋๋ผ๋ ์กด์ฌํ๋ฉด ์ญ์ ํ๋ค๋ ๋ป์ด๋ค. how="all" ์ต์
์ผ๋ก ์
๋ ฅํ๋ฉด ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ NaN๊ฐ์ผ ๊ฒฝ์ฐ์๋ง ์ญ์ ๊ฐ ๋๋ค. ์์ ์์๋ 891๊ฐ์ ํ ์ค์์ ๋์ด ๋ฐ์ดํฐ๊ฐ ๋๋ฝ๋ 177๊ฐ ํ์ ์ญ์ ํ๊ณ ๋๋จธ์ง 714๊ฐ์ ํ์ df_age์ ์ ์ฅํ๋ค
df_age = df. dropna( subset= [ "age" ] , how= "any" , axis= 0 )
missing_data = df_age. isnull( )
for col in missing_data. columns:
eda = missing_data[ col] . value_counts( )
try :
print ( col, ":" , eda[ True ] )
except :
print ( col, ":" , 0 )
survived : 0
pclass : 0
sex : 0
age : 0
sibsp : 0
parch : 0
fare : 0
embarked : 2
class : 0
who : 0
adult_male : 0
deck : 530
embark_town : 2
alive : 0
alone : 0
๋๋ฝ ๋ฐ์ดํฐ ์นํ
- ๋๋ฝ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฟ์ ๋์ฒดํ ๊ฐ์ผ๋ก๋ ๋ฐ์ดํฐ์ ๋ถํฌ์ ํน์ฑ์ ์ ๋ํ๋ผ ์ ์๋ ํ๊ท ๊ฐ, ์ต๋น๊ฐ ๋ฑ์ ํ์ฉํ๋ค.
- ํ๋ค์ค์์๋ fillna() ๋ฉ์๋๋ฅผ ์ใ
ํ๋ค.
- ์๋ณธ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด inplace = True์ต์
์ ์ถ๊ฐํด์ผ ํ๋ค.
- ํ๊ท (Mean)์ผ๋ก ๋๋ฝ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ฟ์ฃผ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์. ์์ ์์ ์ฒ๋ผ ์น๊ฐ์ ๋์ด ๋ฐ์ดํฐ๊ฐ ๋๋ฝ๋ ํ์ ์ ๊ฑฐํ์ง ์๊ณ , ๋์ 'age'์ด์ ๋๋จธ
์ง ์น๊ฐ์ ํ๊ท ๋์ด๋ก ์นํํ๋ค. ๋จผ์ 'age'์ด์ ๋ค์ด์๋ ๊ฐ๋ค์ ํ๊ท ์ ๊ณ์ฐํ์ฌ mean_age์ ์ ์ฅํ๋ค. mean() ๋ฉ์๋๋ฅผ ์ ์ฉํ๋ฉด NaN์ ์ ์ธ
ํ๊ณ ํ๊ท ์ ๊ณ์ฐํ๋ค. fillna() ๋ฉ์๋์ mean_age๋ฅผ ์ธ์๋ก ์ ๋ฌํ๋ฉด NaN์ ์ฐพ์์ mean_age๊ฐ์ผ๋ก ์นํํ๋ค.
์ ์ํ ๋ฐ์ดํฐ
import seaborn as sns
df = sns. load_dataset( 'titanic' )
print ( df[ 'age' ] . head( 10 ) )
print ( '\n' )
mean_age = df[ 'age' ] . mean( axis= 0 )
df[ "age" ] . fillna( mean_age, inplace= True )
print ( df[ 'age' ] . head( 10 ) )
๋ฒ์ฃผํ ๋ฐ์ดํฐ
์น์ ๋์๋ฅผ ๋ํ๋ด๋ 'embarktown'์ด์ ์๋ NaN์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ฐ๊พผ๋ค. ์น๊ฐ๋ค์ด ๊ฐ์ฅ ๋ง์ด ์น์ ํ ๋์์ ์ด๋ฆ์ ์ฐพ์์ NaN์ ์นํํ๋ค. ๋จผ์ value counts() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์น์ ๋์๋ณ ์น๊ฐ ์๋ฅผ ์ฐพ๊ณ , idxmax() ๋ฉ์๋๋ก ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ฐ๋ ๋์๋ฅผ ์ฐพ๋๋ค. ์คํ ๊ฒฐ๊ณผ์์ 829ํ์ NaN๊ฐ์ ํฌํจํด์ ๋๋ฝ ๋ฐ์ดํฐ๋ค์ Southamption์ผ๋ก ๋ณ๊ฒฝํ๋ค
import seaborn as sns
df = sns. load_dataset( 'titanic' )
print ( df[ 'embark_town' ] [ 825 : 830 ] )
print ( '\n' )
most_freq = df[ "embark_town" ] . value_counts( dropna= True ) . idxmax( )
print ( most_freq)
print ( '\n' )
df[ 'embark_town' ] . fillna( most_freq, inplace= True )
print ( df[ 'embark_town' ] [ 825 : 830 ] )
825 Queenstown
826 Southampton
827 Cherbourg
828 Queenstown
829 NaN
Name: embark_town, dtype: object
Southampton
825 Queenstown
826 Southampton
827 Cherbourg
828 Queenstown
829 Southampton
Name: embark_town, dtype: object
๋๋ฝ ๋ฐ์ดํฐ๊ฐ ํ์๊ฐ ์๋ ๋
๋๋ฝ ๋ฐ์ดํฐ๊ฐ NaN์ผ๋ก ํ์๋์ง ์์ ๊ฒฝ์ฐ
- ๋ฐ์ดํฐ์
์ค์๋ ๋๋ฝ ๋ฐ์ดํฐ๊ฐ NaN์ผ๋ก ์
๋ ฅ๋์ง ์์ ๊ฒฝ์ฐ๋ ๋ง๋ค. ์๋ฅผ ๋ค๋ฉด, ์ซ์ 0์ด๋ ๋ฌธ์ '-','?' ๊ฐ์ ๊ฐ์ผ๋ก ์
๋ ฅ๋๊ธฐ๋ ํ๋ค. ํ๋ค์ค์์ ๋๋ฝ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ค๋ฉด replace() ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ NumPy์์ ์ง์ํ๋ np.nan์ผ๋ก ๋ณ๊ฒฝํด์ฃผ๋ ๊ฒ์ด ์ข๋ค. ๋จ, np.nan์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ "import numpy as np"์ ๊ฐ์ด NumPy๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋จผ์ ์ํฌํธํด์ผ ํ๋ค.
- ์ฌ์ฉ๋ฒ: df.replace('?', np.nan, inplace=True)
- nan์ธ์ ๋ค๋ฅธ ๋๋ฝ๊ฐ์ด ์๋ ํ์ธ๋ฒ: unicon.apply(lambda x: "?" in list(x), axis=1 )
๋ฒ์ฃผํ ๋ฐ์ดํฐ ํน์ฑ์ ์ด์ฉํ ๊ฒฐ์ธก์น ์นํ
๋ฐ์ดํฐ์
์ ํน์ฑ์ ์๋ก ์ด์ํ๊ณ ์๋ ๋ฐ์ดํฐ๋ผ๋ฆฌ ์ ์ฌ์ฑ์ ๊ฐ์ง ๊ฐ๋ฅ์ฑ์ด ๋๋ค. ์ด๋ด ๋๋ ์์ด๋ ๋ค์์ ์ด์ํ๊ณ ์๋ ๊ฐ์ผ๋ก ์นํํด ์ฃผ๋ ๊ฒ์ด ์ข๋ค. fillna() ๋ฉ์๋์ method='ffill' ์ต์
์ ์ถ๊ฐํ๋ฉด NaN์ด ์๋ ํ์ ์ง์ ํ์ ์๋ ๊ฐ์ผ๋ก ๋ฐ๊ฟ์ค๋ค. method='bfill' ์ต์
์ ์ฌ์ฉํ๋ฉด NaN์ด ์๋ ํ์ ๋ฐ๋ก ๋ค์ ํ์ ์๋ ๊ฐ์ ๊ฐ์ง๊ณ ์นํํ๋ค. ๋ค์์ ์์ ์์๋ 'ffill'์ต์
์ ์ฌ์ฉํ์ฌ 829ํ์ NaN๊ฐ์ ๋ฐ๋ก ์์ ์์นํ 828ํ์ Queenstown์ผ๋ก ๋ณ๊ฒฝํ๋ค.
import seaborn as sns
df = sns. load_dataset( 'titanic' )
df[ 'embark_town' ] . fillna( method= 'ffill' , inplace= True )
df[ 'embark_town' ] . value_counts( dropna= True )
Southampton 644
Cherbourg 169
Queenstown 78
Name: embark_town, dtype: int64
์ค๋ณต ๋ฐ์ดํฐ ์ฒ๋ฆฌ
์ค๋ณต ๋ฐ์ดํฐ ํ์ธ
- ๋์ผํ ๊ด์ธก๊ฐ์ด ์ค๋ณต๋๋์ง ์ฌ๋ถ, ์ฆ ํ์ ๋ ์ฝ๋๊ฐ ์ค๋ณต๋๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ค๋ฉด duplicated()๋ฉ์๋๋ฅผ ์ด์ฉํ๋ค. ์ ์ ๋์จ ํ๋ค๊ณผ ๋น๊ตํ์ฌ
์ค๋ณต๋๋ ํ์ด๋ฉด True๋ฅผ ๋ฐํํ๊ณ , ์ฒ์ ๋์ค๋ ํ์ ๋ํด์๋ False๋ฅผ ๋ฐํํ๋ค.
- ๋ฐ์ดํฐํ๋ ์์ duplicated() ๋ฉ์๋๋ฅผ ์ ์ฉํ๋ฉด ๊ฐ ํ์ ์ค๋ณต ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ๋ถ๋ฆฐ ์๋ฆฌ์ฆ๋ฅผ ๋ฐํํ๋ค.
- 0ํ์ ๋ฐ์ดํฐ๋ ๋ค์ ๋์ค๋ 1ํ์ ๋ฐ์ดํฐ์ ๊ฐ์ง๋ง ์ฒ์ ๋์ค๋ ๊ฐ์ด๋ค. ์ฆ, ์์ ๋น๊ตํ ๋ฐ์ดํฐ๊ฐ ์์์๊ธฐ ๋๋ฌธ์ ์ค๋ณต์ด ์๋๋ผ๋ ๋ป์์ False
๋ก ํ์ ํ๋ค. 1ํ์ ๋ฐ์ดํฐ๋ ์์ 0ํ๊ณผ ์ค๋ณต๋๊ธฐ ๋๋ฌธ์ True๊ฐ ๋๋ค.
import pandas as pd
df = pd. DataFrame(
{ 'c1' : [ 'a' , 'a' , 'b' , 'a' , 'b' ] ,
'c2' : [ 1 , 1 , 1 , 2 , 2 ] ,
'c3' : [ 1 , 1 , 2 , 2 , 2 ] } )
print ( df)
print ( '\n' )
df_dup = df. duplicated( )
print ( df_dup)
print ( '\n' )
c1 c2 c3
0 a 1 1
1 a 1 1
2 b 1 2
3 a 2 2
4 b 2 2
0 False
1 True
2 False
3 False
4 False
dtype: bool
๋ฐ์ดํฐํ๋ ์์ ์ด์ ์๋ฆฌ์ฆ ๊ฐ์ฒด์ด๋ฏ๋ก, duplicated() ๋ฉ์๋๋ฅผ ์ ์ฉํ ์ ์๋ค. ๋ฐ์ดํฐํ๋ ์ dfdml 'c2'์ด์ ์ ์ 1๊ณผ 2๋ก ๊ตฌ์ฑ๋๋ค. 1์ด ์ฒ์ ๋ํ๋ 0ํ๊ณผ 2๊ฐ ์ฒ์ ๋ํ๋ 3ํ์ ์ ์ธํ๊ณ ๋๋จธ์ง 1,2,4ํ์ ์ด์ ์ ๋์จ ํ๊ณผ ์ค๋ณต๋๋ฏ๋ก True๊ฐ ๋๋ค. 1,2ํ์ ๋ฐ์ดํฐ 1์ ๊ฐ์ง 0ํ๊ณผ ์ค๋ณต๋๊ณ , 4ํ์ ๋ฐ์ดํฐ 2๋ฅผ ๊ฐ์ง 3ํ๊ณผ ์ค๋ณต๋๋ค.
col_dup = df[ 'c2' ] . duplicated( )
print ( col_dup)
0 False
1 True
2 True
3 False
4 True
Name: c2, dtype: bool
์ค๋ณต ๋ฐ์ดํฐ ์ ๊ฑฐ
์ค๋ณต ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๋ ๋ช
๋ น์๋ drop_duplicates() ๋ฉ์๋๊ฐ ์๋ค. ์ค๋ณต๋๋ ํ์ ์ ๊ฑฐํ๊ณ ๊ณ ์ ํ ๊ด์ธก๊ฐ์ ๊ฐ์ง ํ๋ค๋ง ๋จ๊ธด๋ค. ์๋ณธ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด inplace=True ์ต์
์ ์ถ๊ฐํ๋ค. ๋ค์ ์์ ์์ 1ํ์ ๋ฐ์ดํฐ๋ ์์ ์ด์ํ๊ณ ์๋ 0ํ์ ๋ฐ์ดํฐ์ ์ค๋ณต๋๋ฏ๋ก ์ ๊ฑฐ๋๋ค.
import pandas as pd
df= pd. DataFrame( {
"c1" : [ 'a' , 'a' , 'b' , 'a' , 'b' ] ,
"c2" : [ 1 , 1 , 1 , 2 , 2 ] ,
"c3" : [ 1 , 1 , 2 , 2 , 2 ]
} )
print ( df)
print ( '\n' )
c1 c2 c3
0 a 1 1
1 a 1 1
2 b 1 2
3 a 2 2
4 b 2 2
df2 = df. drop_duplicates( )
print ( df2)
print ( '\n' )
c1 c2 c3
0 a 1 1
2 b 1 2
3 a 2 2
4 b 2 2
drop_duplicates() ๋ฉ์๋์ subset ์ต์
์ "์ด ์ด๋ฆ์ ๋ฆฌ์คํธ"๋ฅผ ์ ๋ฌํ ์ ์๋ค. ๋ฐ์ดํฐ์ ์ค๋ณต์ฌ๋ถ๋ฅผ ํ๋ณํ ๋, subset ์ต์
์ ํด๋นํ๋ ์ด์ ๊ธฐ์ค์ผ๋ก ํ๋จํ๋ค. ๋ฐ์ดํฐํ๋ ์ df์ 'c2','c3' ์ด์ ๊ธฐ์ค์ผ๋ก ํ๋ณํ๋ฉด 0ํ๊ณผ 1ํ, 3ํ๊ณผ 4ํ์ ๋ฐ์ดํฐ๊ฐ ๊ฐ๊ฐ ์ค๋ณต๋๋ค.
df3 = df. drop_duplicates( subset= [ 'c2' , 'c3' ] )
print ( df3)
c1 c2 c3
0 a 1 1
2 b 1 2
3 a 2 2
๋ฐ์ดํฐ ํ์คํ
์ฝ๋ ์ค์ ์์
ํน์ ์ปฌ๋ผ ๊ฐฏ์๊ฐ ์ผ์ ์์ค์ ๊ฐฏ์๋ฅผ ๋๊ฒจ์ผ True๋๋ ์ฝ๋
ํน์ ์ปฌ๋ผ์ ์กฐ๊ฑด์ด True์ธ ์ ์ฒด ๋ฐ์ดํฐ ์กฐํ
์๋ก์ด ์ด์ ๋ฆฌ์คํธ๋ก ๊ฐ ์ถ๊ฐ
Unique()ํจ์๋ ๋ฐํ๊ฐ์ ๋ฆฌ์คํธ๋ก ๋๋ ค์ค๋ค.
[126814 294387 294337 126521 294367 126538 439986 126674 126516 507086
126664 403351 126983 227414 126606 126831 510329 227415 403359 403434
469458 419998 126802 419945 419977 126772 403462 127065 469473 469677
127090 127060 420046 420008 294530 403470]