[Pandas] ์‹ค๋ฌด์—์„œ ์“ฐ๋ ค๊ณ  ์ •๋ฆฌํ•ด๋‘” Code Snippet

Posted by Euisuk's Dev Log on September 6, 2024

[Pandas] ์‹ค๋ฌด์—์„œ ์“ฐ๋ ค๊ณ  ์ •๋ฆฌํ•ด๋‘” Code Snippet

์›๋ณธ ๊ฒŒ์‹œ๊ธ€: https://velog.io/@euisuk-chung/Pandas-์‹ค๋ฌด์—์„œ-์“ฐ๋ ค๊ณ -์ •๋ฆฌํ•ด๋‘”-Code-Snippet

ํŒŒ์ด์ฌ์˜ Pandas ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ์กฐ์ž‘์„ ์œ„ํ•œ ํ•„์ˆ˜ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, ๋ฐ์ดํ„ฐ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ ๊ณผํ•™์ž์˜ ์ค‘์š”ํ•œ ๊ณผ์ œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด์ „ ํฌ์ŠคํŠธ๋“ค์—์„œ๋„ ๋ช‡ ๋ฒˆ ๊ฐœ๋… ๋ฐ ์ฃผ์š” ํ•จ์ˆ˜๋“ค์„ ์†Œ๊ฐœํ•ด๋“œ๋ ธ๋Š”๋ฐ์š”.

์ด ๊ธ€์—์„œ๋Š” ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” Pandas์˜ ์ •๋ ฌ ๋ฐ ๋ถ„์„์— ์œ ์šฉํ•œ ํ…Œํฌ๋‹‰๊ณผ ํ•จ๊ป˜, ์‹ค๋ฌด์—์„œ ๋ฐ”๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์Šค๋‹ˆํŽซ์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์Šค๋‹ˆํŽซ์€ ๋ฐ”๋กœ ๋ณต์‚ฌํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋‹ˆ, ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋น ๋ฅด๊ฒŒ ์ฐธ์กฐํ•ด๋ณด์„ธ์š”! (์‹ค์€ ์ œ๊ฐ€ ์“ฐ๋ ค๊ณ  ๋งŒ๋“ค์–ด๋‘” ๊ฒƒ์€ ์•ˆ ๋น„๋ฐ€)

  1. ์ •๋ ฌ ์˜ต์…˜

๐Ÿ“Œ sort_values()๋กœ ์ปฌ๋Ÿผ ๊ฐ’ ๊ธฐ์ค€ ์ •๋ ฌ

  • sort_values() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    1
    2
    3
    4
    5
    
    ## ํŠน์ • ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ (default: ์˜ค๋ฆ„์ฐจ์ˆœ)
    df_sorted = df.sort_values(by='column_name')
      
    ## ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ, ์ฒซ ๋ฒˆ์งธ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ, ๋‘ ๋ฒˆ์งธ๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ
    df_sorted = df.sort_values(by=['column1', 'column2'], ascending=[True, False])
    

๐Ÿ“Œ sort_index()๋กœ ์ธ๋ฑ์Šค ๊ธฐ์ค€ ์ •๋ ฌ

  • ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•  ๋•Œ sort_index()๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ์‹œ๊ฐ„์ˆœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

    1
    2
    3
    4
    5
    
    ## ์ธ๋ฑ์Šค๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
    df_sorted = df.sort_index()
      
    ## ์ธ๋ฑ์Šค๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
    df_sorted = df.sort_index(ascending=False)
    

๐Ÿ“Œ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ๊ณผ ์›๋ณธ ์ˆ˜์ •

  • ์ •๋ ฌ ์‹œ ascending=False ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. inplace=True ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์›๋ณธ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์ด ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค.

    1
    2
    
    ## ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ ๋ฐ ์›๋ณธ ์ˆ˜์ •
    df.sort_values(by='column_name', ascending=False, inplace=True)
    

๐Ÿ“Œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ํƒ

  • sort_values()๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ โ€˜quicksortโ€™ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•ˆ์ •์ ์ธ ์ •๋ ฌ์ด ํ•„์š”ํ•  ๋•Œ๋Š” โ€˜mergesortโ€™๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    1
    2
    
    ## ์•ˆ์ •์ ์ธ ์ •๋ ฌ์„ ์œ„ํ•ด mergesort ์‚ฌ์šฉ
    df_sorted = df.sort_values(by='column_name', kind='mergesort')
    
  1. ์ปฌ๋Ÿผ ๋ณ€๊ฒฝ

๋ฐ์ดํ„ฐ ๋ถ„์„ ์‹œ ์ปฌ๋Ÿผ์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ˆœ์„œ๋ฅผ ์žฌ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค. Pandas์—์„œ๋Š” ๊ฐ„๋‹จํ•œ ๋ช…๋ น์–ด๋กœ ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ์ˆ˜์ •ํ•˜๊ณ , ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ ์ปฌ๋Ÿผ ์ด๋ฆ„ ๋ณ€๊ฒฝ

  • ์ปฌ๋Ÿผ์˜ ์ด๋ฆ„์„ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. dict๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ์˜ ์ด๋ฆ„์„ ๋™์‹œ์— ๋ฐ”๊พธ๊ฑฐ๋‚˜, ํŠน์ • ์ปฌ๋Ÿผ๋งŒ ์„ ํƒ์ ์œผ๋กœ ์ˆ˜์ • ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

    1
    2
    
    # ์›๋ณธ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ˆ˜์ • (inplace=True)
    df.rename(columns={'old_name': 'new_name'}, inplace=True)
    

๐Ÿ“Œ ์ •๋ ฌ ๊ธฐ๋ฐ˜ ์ปฌ๋Ÿผ ์ˆœ์„œ ๋ณ€๊ฒฝ

  • ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ์•ŒํŒŒ๋ฒณ ์ˆœ ๋˜๋Š” ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    1
    2
    
    df.columns = df.columns.sort_values() # ๋ฐฉ๋ฒ•1 
    df.columns = sorted(df.columns) # ๋ฐฉ๋ฒ•2
    

๐Ÿ“Œ ์ผ๋ถ€ ์ปฌ๋Ÿผ ์ˆœ์„œ ๋ณ€๊ฒฝํ•˜๊ธฐ

  • ํ•„์š”ํ•œ ์ผ๋ถ€ ์ปฌ๋Ÿผ๋งŒ์„ ๋งจ ์•ž์— ๋ฐฐ์น˜ํ•˜๊ณ  ๋‚˜๋จธ์ง€ ์ปฌ๋Ÿผ์€ ๊ธฐ์กด ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    1
    2
    3
    
    # 'Date'์™€ 'Time' ์ปฌ๋Ÿผ์„ ๋งจ ์•ž์— ๋ฐฐ์น˜
    desired_order = ['Date', 'Time']
    df = df[desired_order + [col for col in df.columns if col not in desired_order]]
    

  1. ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง

๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•  ๋•Œ ํŠน์ • ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ๋‹จ์ผ ์กฐ๊ฑด ํ•„ํ„ฐ๋ง

1
2
# ํŠน์ • ์ปฌ๋Ÿผ ๊ฐ’์ด 100๋ณด๋‹ค ํฐ ํ–‰๋งŒ ํ•„ํ„ฐ๋ง
filtered_df = df[df['column_name'] > 100]

๐Ÿ“Œ ์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ ์กฐํ•ฉํ•œ ํ•„ํ„ฐ๋ง

1
2
# ์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ ์กฐํ•ฉํ•œ ํ•„ํ„ฐ๋ง
filtered_df = df[(df['column1'] > 100) & (df['column2'] == 'specific_value')]

  1. ๋ฐ์ดํ„ฐ ํƒ์ƒ‰

๋ฐ์ดํ„ฐ ํƒ์ƒ‰์€ ๋ถ„์„ ์ž‘์—…์˜ ์ฒซ ๋‹จ๊ณ„๋กœ, ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ์™€ ์ฃผ์š” ํŠน์ง•์„ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

  • Pandas์—์„œ๋Š” ๊ฐ„๋‹จํ•œ ๋ช…๋ น์–ด๋กœ ๋ฐ์ดํ„ฐ์˜ ์š”์•ฝ ์ •๋ณด, ๊ธฐ์ˆ  ํ†ต๊ณ„, ๊ฒฐ์ธก์น˜ ๋“ฑ์„ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
1
2
3
4
5
6
7
8
9
10
11
# ์ฒ˜์Œ 5ํ–‰ ๋ณด๊ธฐ
df.head()

# ๊ธฐ๋ณธ ์ •๋ณด ๋ณด๊ธฐ
df.info()

# ๊ธฐ์ˆ  ํ†ต๊ณ„๋Ÿ‰ ๋ณด๊ธฐ
df.describe()

# ๊ฒฐ์ธก์น˜ ํ™•์ธ
df.isnull().sum()

  1. ๊ฒฐ์ธก์น˜ ์ฒ˜๋ฆฌ

์‹ค์ œ ๋ฐ์ดํ„ฐ์—์„œ ๊ฒฐ์ธก์น˜๋Š” ๋งค์šฐ ํ”ํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. Pandas๋Š” ๊ฒฐ์ธก์น˜๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ์ธก์น˜๋ฅผ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜, ํŠน์ • ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ•ด๋‹น ์„น์…˜์—์„œ๋Š” dropna, fillna, bfill, ffill ๋“ฑ ๊ฒฐ์ธก์น˜ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ dropna()๋กœ ๊ฒฐ์ธก์น˜ ์ œ๊ฑฐ

  • dropna()๋Š” ๊ฒฐ์ธก์น˜๊ฐ€ ํฌํ•จ๋œ ํ–‰ ๋˜๋Š” ์—ด์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ์ธก์น˜๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ถ„์„์„ ์ง„ํ–‰ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

    1
    2
    3
    4
    5
    
    # ๊ฒฐ์ธก์น˜๊ฐ€ ํฌํ•จ๋œ ํ–‰์„ ์ œ๊ฑฐ
    df_cleaned = df.dropna()
      
    # ํŠน์ • ์ปฌ๋Ÿผ์—์„œ ๊ฒฐ์ธก์น˜๊ฐ€ ํฌํ•จ๋œ ํ–‰๋งŒ ์ œ๊ฑฐ
    df_cleaned = df.dropna(subset=['column_name'])
    

๐Ÿ“Œ fillna()๋กœ ๊ฒฐ์ธก์น˜ ์ฑ„์šฐ๊ธฐ

  • fillna()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ์ธก์น˜๋ฅผ ํŠน์ • ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‰๊ท ๊ฐ’, ์ค‘๊ฐ„๊ฐ’ ๋˜๋Š” ๊ณ ์ •๋œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ์ธก์น˜๋ฅผ ์ฑ„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    1
    2
    3
    4
    5
    
    # ๊ฒฐ์ธก์น˜๋ฅผ 0์œผ๋กœ ๋Œ€์ฒด
    df_filled = df.fillna(0)
      
    # ํŠน์ • ์ปฌ๋Ÿผ์˜ ๊ฒฐ์ธก์น˜๋ฅผ ํ‰๊ท ๊ฐ’์œผ๋กœ ๋Œ€์ฒด
    df['column_name'] = df['column_name'].fillna(df['column_name'].mean())
    

๐Ÿ“Œ bfill()๋กœ ๊ฒฐ์ธก์น˜ ๋’ค์—์„œ ์ฑ„์šฐ๊ธฐ

  • bfill()์€ ๊ฒฐ์ธก์น˜๊ฐ€ ์žˆ๋Š” ์…€์„ ๋’ค์— ์žˆ๋Š” ๊ฐ’์œผ๋กœ ์ฑ„์›๋‹ˆ๋‹ค. ์‹œ๊ฐ„ ์ˆœ์„œ ๋ฐ์ดํ„ฐ์—์„œ ๊ฒฐ์ธก์น˜๋ฅผ ๋’ค์˜ ๊ฐ’์œผ๋กœ ์ฑ„์›Œ ์—ฐ์†์„ฑ์„ ์œ ์ง€ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

    1
    2
    
    # ๊ฒฐ์ธก์น˜๋ฅผ ๋’ค์˜ ๊ฐ’์œผ๋กœ ์ฑ„์šฐ๊ธฐ
    df_bfill = df.fillna(method='bfill')
    

๐Ÿ“Œ ffill()๋กœ ๊ฒฐ์ธก์น˜ ์•ž์—์„œ ์ฑ„์šฐ๊ธฐ

  • ffill()์€ ๊ฒฐ์ธก์น˜๊ฐ€ ์žˆ๋Š” ์…€์„ ์•ž์— ์žˆ๋Š” ๊ฐ’์œผ๋กœ ์ฑ„์›๋‹ˆ๋‹ค. ์ด๋Š” ์—ฐ์†์ ์ธ ๊ฐ’์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์—์„œ ๊ฒฐ์ธก์น˜๋ฅผ ์ฑ„์šธ ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

    1
    2
    
    # ๊ฒฐ์ธก์น˜๋ฅผ ์•ž์˜ ๊ฐ’์œผ๋กœ ์ฑ„์šฐ๊ธฐ
    df_ffill = df.fillna(method='ffill')
    

  1. Lambda ํ•จ์ˆ˜๋กœ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜

  • Lambda ํ•จ์ˆ˜์™€ apply() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•  ๋•Œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ์กฐ๊ฑด๋ถ€ ์ˆ˜์น˜ ๋ณ€ํ™˜

  • ํŠน์ • ๊ฐ’ ์ด์ƒ์ด๊ฑฐ๋‚˜ ์ดํ•˜์ธ ๊ฒฝ์šฐ ๊ฐ’์„ ํŠน์ • ์ƒ์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜, ํŠน์ • ๋ฒ”์œ„์— ์†ํ•  ๋•Œ ๋‹ค๋ฅธ ๊ฐ’์„ ๋Œ€์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    1
    2
    
    # ๊ฐ’์ด 0๋ณด๋‹ค ์ž‘์œผ๋ฉด 0์œผ๋กœ ๋ณ€ํ™˜, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ทธ๋Œ€๋กœ ์œ ์ง€
    df['non_negative'] = df['value'].apply(lambda x: 0 if x < 0 else x)
    

๐Ÿ“Œ ์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ

  • ์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, elif ๋Œ€์‹  else๋ฅผ ์ค‘์ฒฉ์‹œ์ผœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    1
    2
    
    # 100 ์ด์ƒ์€ 'A', 50 ์ด์ƒ์€ 'B', ๊ทธ ์™ธ๋Š” 'C'๋กœ ๋ถ„๋ฅ˜
    df['grade'] = df['score'].apply(lambda x: 'A' if x >= 100 else ('B' if x >= 50 else 'C'))
    

๐Ÿ“Œ ๋Œ€์†Œ๋ฌธ์ž ๋ณ€ํ™˜

  • ๋ฌธ์ž์—ด์„ ๋Œ€๋ฌธ์ž๋‚˜ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋žŒ๋‹ค ํ•จ์ˆ˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

    1
    2
    
    # ์ปฌ๋Ÿผ์˜ ๋ชจ๋“  ๊ฐ’์„ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜
    df['upper_case'] = df['text_column'].apply(lambda x: x.upper())
    

๐Ÿ“Œ ๋ฆฌ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ธฐ

  • ๋žŒ๋‹ค ํ•จ์ˆ˜๋Š” ๋ฆฌ์ŠคํŠธ๋‚˜ ๋ฐฐ์—ด ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ๋„ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

    1
    2
    
    # ๋ฆฌ์ŠคํŠธ ๋‚ด ์š”์†Œ์˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ๊ฐ’ ๋ณ€ํ™˜
    df['list_length'] = df['list_column'].apply(lambda x: len(x))
    

๐Ÿ“Œ ๋ฌธ์ž์—ด ๊ธธ์ด์— ๋”ฐ๋ผ ํ•„ํ„ฐ๋ง

  • ๋ฌธ์ž์—ด์˜ ๊ธธ์ด์— ๋”ฐ๋ผ ์กฐ๊ฑด์„ ๊ฑธ์–ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    1
    2
    
    # ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ 5 ์ด์ƒ์ธ ๊ฒฝ์šฐ์—๋งŒ ์œ ์ง€ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 'Short'๋กœ ๋ณ€ํ™˜
    df['processed_text'] = df['text_column'].apply(lambda x: x if len(x) >= 5 else 'Short')
    

  1. ๊ทธ๋ฃนํ™” ๋ฐ ์ง‘๊ณ„

  • ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ์ง‘๊ณ„ํ•  ๋•Œ๋Š” groupby()๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ํ†ต๊ณ„๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
1
2
3
4
5
# ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ํ‰๊ท ๊ฐ’ ๊ณ„์‚ฐ
grouped_df = df.groupby('category_column')['numeric_column'].mean()

# ๋‹ค์ค‘ ์ปฌ๋Ÿผ ๊ทธ๋ฃนํ™” ํ›„ ์ง‘๊ณ„
grouped_df = df.groupby(['category1', 'category2'])['numeric_column'].agg(['mean', 'sum'])

  1. ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€ํ™˜

๋ฐ์ดํ„ฐ ๋ถ„์„์„ ์œ„ํ•ด ์ปฌ๋Ÿผ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋ณ€ํ™˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ ๋ฌธ์ž์—ด์„ ๋‚ ์งœ๋กœ ๋ณ€ํ™˜

1
2
# ๋ฌธ์ž์—ด์„ ๋‚ ์งœ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜
df['date_column'] = pd.to_datetime(df['date_column'])

๐Ÿ“Œ ์ˆ˜์น˜ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์นดํ…Œ๊ณ ๋ฆฌํ˜•์œผ๋กœ ๋ณ€ํ™˜

1
2
# ์ˆ˜์น˜ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์นดํ…Œ๊ณ ๋ฆฌํ˜•์œผ๋กœ ๋ณ€ํ™˜
df['category_column'] = df['category_column'].astype('category')

๋งˆ๋ฌด๋ฆฌ

Pandas์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์ •๋ ฌํ•˜๊ณ  ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ ์†Œ๊ฐœํ•œ ์Šค๋‹ˆํŽซ๋“ค์€ ์‹ค๋ฌด์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํ…Œํฌ๋‹‰๋“ค๋กœ, ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋น ๋ฅด๊ฒŒ ๋ณต์‚ฌํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Pandas์˜ ํ’๋ถ€ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ตํžˆ๋ฉด ๋ฐ์ดํ„ฐ ์กฐ์ž‘๊ณผ ๋ถ„์„ ์ž‘์—…์—์„œ ํฐ ํšจ์œจ์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ Pandas์—์„œ ๊ณต์‹์œผ๋กœ ์ž‘์„ฑํ•œ Cheating Sheet ๊ณต์œ ๋“œ๋ฆฌ๋ฉด์„œ ์ด๋ฒˆ ํฌ์ŠคํŠธ ๋งˆ์ณ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! (๋งํฌ: https://pandas.pydata.org/Pandas_Cheat_Sheet.pdf)

๋˜ ์ถ”๊ฐ€ํ•  ์ฝ”๋“œ ๋ธ”๋ก์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ๋‹ฌ์•„์ฃผ์„ธ์š” ๐Ÿค—๐Ÿ”Ž



-->