๊ต์ก/์คํ๋ฅดํ
[TIL] ๋ด์ผ๋ฐฐ์์บ ํ AI 9๊ธฐ - 7ํ
by gomdeng
2024. 12. 4.
๐ถ ํ์ต ๋ฒ์
- ๊ฐ์ข: ์ธ๊ณต์ง๋ฅ์ ์ํ ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (3์ฃผ์ฐจ ~ 4์ฃผ์ฐจ)
- Pandas ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ, ์กฐํํ๊ธฐ, ์ ์ฅํ๊ธฐ ๋ฑ..
- ํํฐ๋ง, ์ฐ์ฐ์, ๋ณํ, ์นดํ
๊ณ ๋ฆฌ
- ๋ฐ์ดํฐ ์ ๋ ฌ, ๋ณํฉ
๐ถ ๊ณต๋ถ๋ด์ฉ
โจ Index
๐ฉ ์์ฝ
- index ์กฐํ, ์ค์
๐ฉ ๋ด์ฉ
1. Index
- DataFrame์ด๋ Series ๊ฐ์ฒด์์ ๊ฐ ํ์ ์ ์ผํ๊ฒ ์๋ณํ๋ ๋ ์ด๋ธ
- DataFrame์ด๋ Series๋ฅผ ์์ฑํ ๋ ์ธ๋ฑ์ค๋ฅผ ๋ช
์์ ์ผ๋ก ์ง์ ํ์ง ์์ผ๋ฉด,
Pandas๋ ์๋์ผ๋ก 0๋ถํฐ ์์ํ๋ ์ ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑ
- ๊ธฐ๋ณธ์ ์ผ๋ก, ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํ๋ ์ ์ ๊ฐ์ด์ง๋ง,
๋ฌธ์์ด, ๋ ์ง, ํน์ ๋ค๋ฅธ ํ์ด์ฌ ๊ฐ์ฒด๋ก๋ ์ค์ ๊ฐ๋ฅ
โ๏ธ ์ฃผ์๊ธฐ๋ฅ
1) ์๋ณ ๊ธฐ๋ฅ: ๊ฐ ํ์ด๋ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ์๋ณํ๋ ๊ณ ์ ํ ๊ฐ์ผ๋ก ์ฌ์ฉ
2) ์ ๋ ฌ ๊ธฐ๋ฅ: ๋ฐ์ดํฐ๊ฐ ์ธ๋ฑ์ค์ ๋ฐ๋ผ ์ ๋ ฌ
3) ์กฐํ ๊ธฐ๋ฅ: ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ฐ์ดํฐ์ ํน์ ๋ถ๋ถ์ ๋น ๋ฅด๊ฒ ์กฐํ
4) ์ค๋ณต ํ์ฉ: ์ธ๋ฑ์ค๋ ์ค๋ณต๋ ์ ์์ผ๋ฉฐ, ์ค๋ณต ์ธ๋ฑ์ค๋ ๊ณ ๊ธ ๋ฐ์ดํฐ ์กฐ์์์ ์ฌ์ฉ
๐ฉ ์ฌ์ฉ๋ฒ
# pandas import
import pandas as pd
# dataFrame ์์ฑ
url = 'https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv'
df = pd.read_csv(url)
df.head(3) # ์์์ 3ํ ๋ณด๊ธฐ <> tail(3) ๋ค์์ 3ํ ๋ณด๊ธฐ
โ๏ธ 1. ์ธ๋ฑ์ค ์กฐํ :: index
df.index # RangeIndex(start=0, stop=891, step=1)
# Pandas๋ ์๋์ผ๋ก 0๋ถํฐ ์์ํ๋ ์ ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑ
โ๏ธ 2. ์ธ๋ฑ์ค ์ค์ :: set_index()
# 1) ์ปฌ๋ผ๋ช
๋ง ์ค์ => ์๋ณธ ๋ฐ์ดํฐํ๋ ์์ ๋ณ๊ฒฝ๋์ง ์์
df.set_index('Age')
# 2) inplace ์ต์
์ ์ฉ (False: ์๋ก์ด ๊ฐ์ฒด ๋ฐํ(Default), True: ์ง์ ์์ )
df.set_index('Age', inplace=True)
# 3) drop ์ต์
์ ์ฉ
# ์ธ๋ฑ์ค๋ก ์ค์ ๋ ์ปฌ๋ผ์ ๋ฐ์ดํฐํ๋ ์์์ (์ญ์ /์ ์ง)
# ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ์กฐ์ ํ ๋ ์ ์ฉ
df.set_index('Age', inplace=True, drop=False) # ์ปฌ๋ผ ์ ์ง
df.set_index('Age', inplace=True, drop=True) # ์ปฌ๋ผ ์ญ์ (Default)
โ๏ธ 3. ์ธ๋ฑ์ค ์ด๊ธฐํ :: reset_index()
df.reset_index(inplace=True)
โ๏ธ 4. ์ธ๋ฑ์ค ์ด๋ฆ ์ค์ :: rename()
df.index.rename("NewAge", inplace=True)
โ๏ธ 5. ์ธ๋ฑ์ค ์ค๋ณต ํ์ธ :: is_unique
df.index.is_unique
โ๏ธ 6. ์ธ๋ฑ์ค ๋ฐ์ดํฐ ์ ํ :: loc[], iloc[] > ์ฌ๋ผ์ด์ฑ ๊ฐ๋ฅ
# 1) loc() :: ๋ ์ด๋ธ ๊ธฐ๋ฐ ์ ํ
df.loc[22, 'Name'] # 22 ๋ผ๋ ๊ฐ(ํ)์ ๊ฐ์ง Name๊ฐ(์ด)์ ๊ฐ์ ธ์ค๊ธฐ
2) iloc() :: ์์น ๊ธฐ๋ฐ ์ ํ
df.iloc[22:26, 0:4] # 22~26๋ฒ์งธ ๊ฐ(ํ)์ ๊ฐ์ง 4๋ฒ์งธ ๊น์ง์ ์ปฌ๋ผ๊ฐ(์ด)์ ๊ฐ์ ธ์ค๊ธฐ
โ๏ธ 7. ์ธ๋ฑ์ค ์ ๋ ฌ :: sort_index()
df.sort_index(ascending=True, inplace=True)
โจ loc & iloc
โ๏ธ loc[] :: ๋ ์ด๋ธ ๊ธฐ๋ฐ ์ ํ
1) ์ธ๋ฑ์ค์ ์ด๋ฆ(๋ ์ด๋ธ)์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ํ
2) ์ธ๋ฑ์ค ๊ฐ์ด ๋ช
์์ ์ธ ๋ ์ด๋ธ์ผ ๋ ์ ์ฉ
๐ฉ ์์
1. ๋จ์ผ ๋ ์ด๋ธ
- df.loc['index_label'] → 'index_label'์ ํด๋นํ๋ ํ์ ๋ฐํ
2. ๋ ์ด๋ธ ๋ฆฌ์คํธ
- df.loc[['label1', 'label2']] → 'label1'๊ณผ 'label2'์ ํด๋นํ๋ ์ฌ๋ฌ ํ์ ๋ฐํ
3. ๋ ์ด๋ธ ์ฌ๋ผ์ด์ค
- df.loc['label1':'label2'] → 'label1'์์ 'label2'๊น์ง์ ํ์ ๋ฐํ
- ์ด ๋ 'label2'๋ ๊ฒฐ๊ณผ์ ํฌํจ
โ์ธ๋ฑ์ค์ ๊ฐ์ด ์ ๋ํฌํ์ง ์์ ๊ฒฝ์ฐ ์ค๋ฅ ๋ฐ์
4. ๋ถ์ธ ๋ฐฐ์ด
- df.loc[df['column'] > 10] → 'column'์ ๊ฐ์ด 10๋ณด๋ค ํฐ ๋ชจ๋ ํ์ ์ ํ
โ๏ธ iloc[] :: ์์น ๊ธฐ๋ฐ ์ ํ
1) ์ ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ํ
2) ์์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ์ ์ ๊ทผํ ๋ ์ ์ฉ
๐ฉ ์์
1. ๋จ์ผ ์์น
- df.iloc[4] → ์์น์ 5๋ฒ์งธ ํ์ ๋ฐํ (์ธ๋ฑ์ฑ์ 0๋ถํฐ ์์)
2. ์์น ๋ฆฌ์คํธ
- df.iloc[[0, 2, 5]] → 1๋ฒ, 3๋ฒ, 6๋ฒ์งธ ํ์ ๋ฐํ
3. ์์น ์ฌ๋ผ์ด์ค
- df.iloc[2:5] → 3๋ฒ์งธ์์ 5๋ฒ์งธ ํ์ ๋ฐํ (5๋ฒ์งธ๋ ํฌํจํ์ง ์์)
4. ๋ถ์ธ ๋ฐฐ์ด
- df.iloc[[True, False, True]] → True์ ํด๋นํ๋ ์์น์ ํ์ ๋ฐํ
- df.iloc[2:5, 0:2] → 3๋ฒ์งธ์์ 5๋ฒ์งธ ํ์ ์ฒซ ๋ ์ปฌ๋ผ์ ์ ํ
๐ถ ๋๋์
1. ๋ด์ผ์ ๊ฐ์ข๋ ๋ค ๋ฃ๊ณ ๊ณผ์ ๋ ๋คํ์..
2. ๊ฐ์ข ๋ฃ๋ ์๋๋ ๋๋ ค๋ ์ค์ตํ๊ณ ๊ณต๋ถํ๋ฉด์ ๊ฐ๋๊ฒ ๋ ๋ซ๋ค๋ ์๊ฐ์ด ๋ ๋ค.
3. 12์๊ฐ ๊ฝค๋ ๋์์ด๋ ๋จธ๋ฆฌ ์ํ๋ค.. (์์ผ๋ก 3์ ๊น์ง ๊ณ์ ์ด๋ด๋ฏํ๋ค.)