1. Pandas๋ž€ ๋ฌด์—‡์ธ๊ฐ€

Pandas๋Š” ํŒŒ์ด์ฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐ์ ์œผ๋กœ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œ ๋Œ€ํ‘œ์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค.
์—‘์…€์˜ ํ‘œ์ฒ˜๋Ÿผ ํ–‰(row)๊ณผ ์—ด(column) ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋ถ„์„ยท์ „์ฒ˜๋ฆฌยท์‹œ๊ฐํ™” ๋“ฑ ๊ฑฐ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ถ„์„์˜ ์ถœ๋ฐœ์ ์ด๋‹ค.

Pandas์˜ ํ•ต์‹ฌ ๊ฐ์ฒด๋Š” ๋‘ ๊ฐ€์ง€๋‹ค.

๊ฐ์ฒด๊ตฌ์กฐํŠน์ง•
Series1์ฐจ์› ๋ฐฐ์—ดํ•˜๋‚˜์˜ ์—ด(column)์— ํ•ด๋‹น. ์ธ๋ฑ์Šค(index)์™€ ๊ฐ’(value)์œผ๋กœ ๊ตฌ์„ฑ
DataFrame2์ฐจ์› ํ…Œ์ด๋ธ”์—ฌ๋Ÿฌ Series๋ฅผ ๋ชจ์•„ ๋งŒ๋“  ํ‘œ. ํ–‰๊ณผ ์—ด ๋ชจ๋‘ ์ธ๋ฑ์Šค ๊ฐ€๋Šฅ

2. Pandas ์‹œ์ž‘ํ•˜๊ธฐ

import pandas as pd

๋ณดํ†ต pd๋กœ ์ค„์—ฌ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.
Google Colab์—์„œ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฒ„์ „๊ณผ ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

print(pd.__version__)

3. Series ๊ธฐ๋ณธ๊ธฐ

3.1 Series ์ •์˜ํ•˜๊ธฐ

Series๋Š” ๋ฆฌ์ŠคํŠธ, ๋”•์…”๋„ˆ๋ฆฌ, ๋ฐฐ์—ด ๋“ฑ์œผ๋กœ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

import pandas as pd

s = pd.Series([10, 20, 30])
print(s)
0    10
1    20
2    30
dtype: int64
  • ์™ผ์ชฝ์˜ ์ˆซ์ž(0,1,2)๋Š” ์ธ๋ฑ์Šค(index)
  • ์˜ค๋ฅธ์ชฝ ์ˆซ์ž๋Š” ๊ฐ’(value)

3.2 ์‚ฌ์šฉ์ž ์ •์˜ ์ธ๋ฑ์Šค

Series๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ง์ ‘ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s['a'])
10
  • ๋”•์…”๋„ˆ๋ฆฌ์ฒ˜๋Ÿผ ํ‚ค๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ์‹ค์ œ ๋ฐ์ดํ„ฐ ๋ถ„์„์—์„œ๋Š” ์˜๋ฏธ ์žˆ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”

3.3 Series๋ฅผ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๋งŒ๋“ค๊ธฐ

data = {'์„œ์šธ': 990, '๋ถ€์‚ฐ': 340, '๋Œ€๊ตฌ': 240}
s = pd.Series(data)
  • ํ‚ค โ†’ ์ธ๋ฑ์Šค
  • ๊ฐ’ โ†’ ๋ฐ์ดํ„ฐ ๊ฐ’
s['๋ถ€์‚ฐ']  # 340

3.4 Series ์ฃผ์š” ์†์„ฑ

์†์„ฑ์„ค๋ช…
s.index์ธ๋ฑ์Šค ๋ชฉ๋ก
s.values๊ฐ’ ๋ฐฐ์—ด (NumPy ๊ธฐ๋ฐ˜)
s.dtype๋ฐ์ดํ„ฐ ํƒ€์ž…
s.name์‹œ๋ฆฌ์ฆˆ ์ด๋ฆ„ ์„ค์ • ๊ฐ€๋Šฅ

3.5 Series ๋ฉ”์„œ๋“œ

๋ฉ”์„œ๋“œ์„ค๋ช…์˜ˆ์‹œ
.sum()ํ•ฉ๊ณ„s.sum()
.mean()ํ‰๊ท s.mean()
.sort_values()๊ฐ’ ๊ธฐ์ค€ ์ •๋ ฌs.sort_values(ascending=False)
.unique()๊ณ ์œ ๊ฐ’s.unique()

Series๋Š” ๋ฒกํ„ฐ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

s * 2
s + 100

3.6 CSV ํŒŒ์ผ๋กœ Series ๋‹ค๋ฃจ๊ธฐ

s = pd.read_csv('data.csv', squeeze=True)

squeeze=True๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด DataFrame ๋Œ€์‹  Series๋กœ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.
(์ตœ์‹  ๋ฒ„์ „์—์„œ๋Š” ์ง€์› ์ค‘๋‹จ ์˜ˆ์ •, usecols๋กœ ๋Œ€์ฒด ๊ถŒ์žฅ)


3.7 ์ธ๋ฑ์‹ฑ๊ณผ ์Šฌ๋ผ์ด์‹ฑ

s[0]        # ์œ„์น˜ ๊ธฐ๋ฐ˜ ์ธ๋ฑ์‹ฑ
s['์„œ์šธ']   # ๋ ˆ์ด๋ธ” ๊ธฐ๋ฐ˜ ์ธ๋ฑ์‹ฑ
s[1:3]      # ์Šฌ๋ผ์ด์‹ฑ

3.8 Series ์ˆ˜ํ•™ ์—ฐ์‚ฐ

s1 = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
s2 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
s1 + s2
  • ์ธ๋ฑ์Šค ๊ธฐ์ค€์œผ๋กœ ์ž๋™ ์ •๋ ฌ ํ›„ ์—ฐ์‚ฐ
  • ์ธ๋ฑ์Šค ๋ถˆ์ผ์น˜ ์‹œ NaN(๊ฒฐ์ธก๊ฐ’) ๋ฐœ์ƒ

4. DataFrame ๊ธฐ๋ณธ๊ธฐ

4.1 DataFrame ์ƒ์„ฑ

data = {
  '๋„์‹œ': ['์„œ์šธ', '๋ถ€์‚ฐ', '๋Œ€๊ตฌ'],
  '์ธ๊ตฌ': [990, 340, 240],
  '๋ฉด์ ': [605, 770, 883]
}
df = pd.DataFrame(data)
   ๋„์‹œ   ์ธ๊ตฌ   ๋ฉด์ 
0  ์„œ์šธ  990  605
1  ๋ถ€์‚ฐ  340  770
2  ๋Œ€๊ตฌ  240  883

4.2 CSVยทHTML ํŒŒ์ผ ์ฝ๊ธฐ

df = pd.read_csv('population.csv')
df_html = pd.read_html('https://example.com/table.html')[0]

4.3 ์ธ๋ฑ์Šค ์„ค์ • ๋ฐ ์žฌ์„ค์ •

df.set_index('๋„์‹œ', inplace=True)
df.reset_index(inplace=True)
  • inplace=True๋กœ ์›๋ณธ ๋ณ€๊ฒฝ

4.4 ์—ด ์„ ํƒยท์ถ”๊ฐ€ยท์‚ญ์ œ

df['์ธ๊ตฌ']
df[['์ธ๊ตฌ', '๋ฉด์ ']]
df['๋ฐ€๋„'] = df['์ธ๊ตฌ'] / df['๋ฉด์ ']
df.drop(columns=['๋ฉด์ '], inplace=True)

4.5 ํ–‰ยท์—ด ์„ ํƒ (.loc, .iloc)

๋ฉ”์„œ๋“œ๊ธฐ์ค€์˜ˆ์‹œ
.loc[]์ธ๋ฑ์Šค ์ด๋ฆ„df.loc['์„œ์šธ']
.iloc[]์ •์ˆ˜ ์œ„์น˜df.iloc[0]

4.6 ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ… ์—ฐ์‚ฐ

df['์ธ๊ตฌ'] = df['์ธ๊ตฌ'] * 1000
df['๋ฐ€๋„'] = df['์ธ๊ตฌ'] / df['๋ฉด์ ']

๋ชจ๋“  ํ–‰์— ์—ฐ์‚ฐ์ด ๋™์‹œ์— ์ ์šฉ๋œ๋‹ค.


4.7 ๋ˆ„๋ฝ๊ฐ’ ์ฒ˜๋ฆฌ ๋ฐ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ

df.fillna(0, inplace=True)
df['์ธ๊ตฌ'] = df['์ธ๊ตฌ'].astype(int)

4.8 DataFrame ์ •๋ฆฌ

๋ฉ”์„œ๋“œ๊ธฐ๋Šฅ
df.info()๋ฐ์ดํ„ฐ ์š”์•ฝ
df.describe()ํ†ต๊ณ„ ์š”์•ฝ
df.head()์ƒ์œ„ 5ํ–‰
df.tail()ํ•˜์œ„ 5ํ–‰

โœ… ํ•™์Šต ์ •๋ฆฌ

๊ตฌ๋ถ„ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ
Series1์ฐจ์›, ์ธ๋ฑ์Šค, ๋”•์…”๋„ˆ๋ฆฌ ๊ธฐ๋ฐ˜ ์ƒ์„ฑ
DataFrame2์ฐจ์›, ์—ฌ๋Ÿฌ Series ์กฐํ•ฉ
Indexing.loc, .iloc, ์Šฌ๋ผ์ด์‹ฑ
ํŒŒ์ผ ์ž…์ถœ๋ ฅread_csv, to_csv
๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…ํ–‰ ์ „์ฒด ์—ฐ์‚ฐ
๊ฒฐ์ธก์น˜ ์ฒ˜๋ฆฌfillna, dropna

๐Ÿ”– ๋งˆ๋ฌด๋ฆฌ ๋ฌธ๋‹จ

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Pandas์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ์™€ SeriesยทDataFrame์˜ ํ•ต์‹ฌ ๊ฐœ๋…์„ ๋‹ค๋ค˜๋‹ค.
๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ •์˜ํ•˜๊ณ  ๋‹ค๋ฃจ๋Š” ๊ณผ์ •์„ ์ตํžˆ๋ฉด ์ดํ›„์˜ ์ „์ฒ˜๋ฆฌยท์‹œ๊ฐํ™” ์ž‘์—…์ด ํ›จ์”ฌ ์ˆ˜์›”ํ•ด์ง„๋‹ค.
๋‹ค์Œ ๊ธ€์—์„œ๋Š” ๋ฐ์ดํ„ฐ ๊ฒฐํ•ฉ๊ณผ ์ „์ฒ˜๋ฆฌ (MergeยทJoinยทConcatยทApply) ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

profile
okorion's Tech Study Blog.

0๊ฐœ์˜ ๋Œ“๊ธ€