๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ต์œก/์ŠคํŒŒ๋ฅดํƒ€

[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์›” ๊นŒ์ง€ ๊ณ„์† ์ด๋Ÿด๋“ฏํ•˜๋‹ค.)