
Pandas๋ ํ์ด์ฌ์์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐ์ ์ผ๋ก ๋ค๋ฃจ๊ธฐ ์ํ ๋ํ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
์์
์ ํ์ฒ๋ผ ํ(row)๊ณผ ์ด(column) ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๋ถ์ยท์ ์ฒ๋ฆฌยท์๊ฐํ ๋ฑ ๊ฑฐ์ ๋ชจ๋ ๋ฐ์ดํฐ ๋ถ์์ ์ถ๋ฐ์ ์ด๋ค.
Pandas์ ํต์ฌ ๊ฐ์ฒด๋ ๋ ๊ฐ์ง๋ค.
| ๊ฐ์ฒด | ๊ตฌ์กฐ | ํน์ง |
|---|---|---|
| Series | 1์ฐจ์ ๋ฐฐ์ด | ํ๋์ ์ด(column)์ ํด๋น. ์ธ๋ฑ์ค(index)์ ๊ฐ(value)์ผ๋ก ๊ตฌ์ฑ |
| DataFrame | 2์ฐจ์ ํ ์ด๋ธ | ์ฌ๋ฌ Series๋ฅผ ๋ชจ์ ๋ง๋ ํ. ํ๊ณผ ์ด ๋ชจ๋ ์ธ๋ฑ์ค ๊ฐ๋ฅ |
import pandas as pd
๋ณดํต pd๋ก ์ค์ฌ ๋ถ๋ฌ์จ๋ค.
Google Colab์์ ๋ค์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ๋ฒ์ ๊ณผ ๊ฐ๋จํ ํ
์คํธ๋ฅผ ํ์ธํ ์ ์๋ค.
print(pd.__version__)
Series๋ ๋ฆฌ์คํธ, ๋์ ๋๋ฆฌ, ๋ฐฐ์ด ๋ฑ์ผ๋ก ์ฝ๊ฒ ์์ฑํ ์ ์๋ค.
import pandas as pd
s = pd.Series([10, 20, 30])
print(s)
0 10
1 20
2 30
dtype: int64
Series๋ ์ธ๋ฑ์ค๋ฅผ ์ง์ ์ง์ ํ ์ ์๋ค.
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s['a'])
10
data = {'์์ธ': 990, '๋ถ์ฐ': 340, '๋๊ตฌ': 240}
s = pd.Series(data)
s['๋ถ์ฐ'] # 340
| ์์ฑ | ์ค๋ช |
|---|---|
s.index | ์ธ๋ฑ์ค ๋ชฉ๋ก |
s.values | ๊ฐ ๋ฐฐ์ด (NumPy ๊ธฐ๋ฐ) |
s.dtype | ๋ฐ์ดํฐ ํ์ |
s.name | ์๋ฆฌ์ฆ ์ด๋ฆ ์ค์ ๊ฐ๋ฅ |
| ๋ฉ์๋ | ์ค๋ช | ์์ |
|---|---|---|
.sum() | ํฉ๊ณ | s.sum() |
.mean() | ํ๊ท | s.mean() |
.sort_values() | ๊ฐ ๊ธฐ์ค ์ ๋ ฌ | s.sort_values(ascending=False) |
.unique() | ๊ณ ์ ๊ฐ | s.unique() |
Series๋ ๋ฒกํฐ ์ฐ์ฐ์ด ๊ฐ๋ฅํ๋ค.
s * 2
s + 100
s = pd.read_csv('data.csv', squeeze=True)
squeeze=True๋ฅผ ์ฌ์ฉํ๋ฉด DataFrame ๋์ Series๋ก ๋ถ๋ฌ์จ๋ค.
(์ต์ ๋ฒ์ ์์๋ ์ง์ ์ค๋จ ์์ , usecols๋ก ๋์ฒด ๊ถ์ฅ)
s[0] # ์์น ๊ธฐ๋ฐ ์ธ๋ฑ์ฑ
s['์์ธ'] # ๋ ์ด๋ธ ๊ธฐ๋ฐ ์ธ๋ฑ์ฑ
s[1:3] # ์ฌ๋ผ์ด์ฑ
s1 = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
s2 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
s1 + s2
NaN(๊ฒฐ์ธก๊ฐ) ๋ฐ์data = {
'๋์': ['์์ธ', '๋ถ์ฐ', '๋๊ตฌ'],
'์ธ๊ตฌ': [990, 340, 240],
'๋ฉด์ ': [605, 770, 883]
}
df = pd.DataFrame(data)
๋์ ์ธ๊ตฌ ๋ฉด์
0 ์์ธ 990 605
1 ๋ถ์ฐ 340 770
2 ๋๊ตฌ 240 883
df = pd.read_csv('population.csv')
df_html = pd.read_html('https://example.com/table.html')[0]
df.set_index('๋์', inplace=True)
df.reset_index(inplace=True)
inplace=True๋ก ์๋ณธ ๋ณ๊ฒฝdf['์ธ๊ตฌ']
df[['์ธ๊ตฌ', '๋ฉด์ ']]
df['๋ฐ๋'] = df['์ธ๊ตฌ'] / df['๋ฉด์ ']
df.drop(columns=['๋ฉด์ '], inplace=True)
.loc, .iloc)| ๋ฉ์๋ | ๊ธฐ์ค | ์์ |
|---|---|---|
.loc[] | ์ธ๋ฑ์ค ์ด๋ฆ | df.loc['์์ธ'] |
.iloc[] | ์ ์ ์์น | df.iloc[0] |
df['์ธ๊ตฌ'] = df['์ธ๊ตฌ'] * 1000
df['๋ฐ๋'] = df['์ธ๊ตฌ'] / df['๋ฉด์ ']
๋ชจ๋ ํ์ ์ฐ์ฐ์ด ๋์์ ์ ์ฉ๋๋ค.
df.fillna(0, inplace=True)
df['์ธ๊ตฌ'] = df['์ธ๊ตฌ'].astype(int)
| ๋ฉ์๋ | ๊ธฐ๋ฅ |
|---|---|
df.info() | ๋ฐ์ดํฐ ์์ฝ |
df.describe() | ํต๊ณ ์์ฝ |
df.head() | ์์ 5ํ |
df.tail() | ํ์ 5ํ |
| ๊ตฌ๋ถ | ํต์ฌ ํค์๋ |
|---|---|
| Series | 1์ฐจ์, ์ธ๋ฑ์ค, ๋์ ๋๋ฆฌ ๊ธฐ๋ฐ ์์ฑ |
| DataFrame | 2์ฐจ์, ์ฌ๋ฌ Series ์กฐํฉ |
| Indexing | .loc, .iloc, ์ฌ๋ผ์ด์ฑ |
| ํ์ผ ์ ์ถ๋ ฅ | read_csv, to_csv |
| ๋ธ๋ก๋์บ์คํ | ํ ์ ์ฒด ์ฐ์ฐ |
| ๊ฒฐ์ธก์น ์ฒ๋ฆฌ | fillna, dropna |
์ด๋ฒ ๊ธ์์๋ Pandas์ ๊ธฐ๋ณธ ๊ตฌ์กฐ์ SeriesยทDataFrame์ ํต์ฌ ๊ฐ๋
์ ๋ค๋ค๋ค.
๋ฐ์ดํฐ๋ฅผ ์ง์ ์ ์ํ๊ณ ๋ค๋ฃจ๋ ๊ณผ์ ์ ์ตํ๋ฉด ์ดํ์ ์ ์ฒ๋ฆฌยท์๊ฐํ ์์
์ด ํจ์ฌ ์์ํด์ง๋ค.
๋ค์ ๊ธ์์๋ ๋ฐ์ดํฐ ๊ฒฐํฉ๊ณผ ์ ์ฒ๋ฆฌ (MergeยทJoinยทConcatยทApply) ๋ก ๋์ด๊ฐ๋ค.