๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ ํŒŒ์ด์ฌ

[Pandas] ๋ฐ์ดํ„ฐ ์…€๋ ‰์…˜๊ณผ Null, ์ค‘๋ณต ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ

by ์œ ์Šค :) 2023. 7. 11.
๋ฐ˜์‘ํ˜•

๐Ÿ’ก Index

     

    1. ๋ฐ์ดํ„ฐ ์…€๋ ‰์…˜

    1) ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ [  ] ์—ฐ์‚ฐ์ž

    (1) ์ปฌ๋Ÿผ(col)์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์…€๋ ‰์…˜ ํ•˜๋Š” ๊ฒฝ์šฐ

    # ํ•˜๋‚˜์˜ col์— ๋Œ€ํ•ด ์…€๋ ‰์…˜ ํ•˜๋Š” ๊ฒฝ์šฐ
    df['col_name']
    
    # ๋‘๊ฐœ ์ด์ƒ์˜ Col์— ๋Œ€ํ•ด ์…€๋ ‰์…˜ ํ•˜๋Š” ๊ฒฝ์šฐ
    # -> Col๋“ค์„ ๋ฆฌ์ŠคํŠธํ˜•ํƒœ๋กœ ๋ฌถ๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด [[]]์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ํŽธํ•˜๋‹ค.
    df[['col_name1','col_name2']]
    
    
    # Series ํ˜•ํƒœ๋Š” ์ธ๋ฑ์Šค๊ฐ€ ๋ถ€์—ฌ๋˜์–ด ํ”„๋ฆฐํŠธ๋œ๋‹ค๋Š” ๊ฒƒ์ด ๋ฆฌ์ŠคํŠธ์™€๋Š” ๋‹ค๋ฅธ ์ ์ด๋‹ค.
    type(df['col_name']) # output: pandas.core.series.Series
    
    # ํŠน์ • ์กฐ๊ฑด์„ ๋ถ€์—ฌํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ
    df[df['col_name']== 2]] # col_name์˜ ๊ฐ’์ด 2์ธ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ํ–‰ ์ถ”์ถœ

    (2) ๋กœ์šฐ(row)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์…€๋ ‰์…˜ ํ•˜๋Š” ๊ฒฝ์šฐ

    # row ์Šฌ๋ผ์ด์‹ฑ
    df[0:4] # 0๋ถ€ํ„ฐ 3๊นŒ์ง€์˜ ํ–‰ ํ”„๋ฆฐํŠธ

     

    2) ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์˜ iloc ์—ฐ์‚ฐ์ž 

    iloc๋Š” ํ”ํžˆ ์šฐ๋ฆฌ๊ฐ€ 0๋ถ€ํ„ฐ ์ธ๋ฑ์Šค๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์…€๋ ‰์…˜ํ•œ๋‹ค๊ณ  ๋ณด๋ฉด๋œ๋‹ค. ๋‹ค๋งŒ ์ฃผ์˜ํ•  ์ ์€ ํ˜„์žฌ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์— ์ง€์ •๋˜์–ด์žˆ๋Š” ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.(๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์˜ ์ง€์ •๋œ ์ธ๋ฑ์Šค ๊ธฐ์ค€์€ loc) ์ธ๋ฑ์Šค๋Š” ๋ฌธ์ž์ผ์ˆ˜๋„, ์ˆซ์ž์ผ์ˆ˜๋„ ์žˆ๊ณ  ๋˜ ๊ทธ ๊ฐ’์ด ์ˆซ์ž์ผ์ง€๋ผ๋„ 0๋ถ€ํ„ฐ ์ •๋ ฌ์ด ์ž˜ ๋˜์–ด์žˆ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๊ธฐ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ iloc๋Š” ์ปดํ“จํ„ฐ๊ฐ€ ์•Œ์•„์„œ ์ง€์ •ํ•œ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์ธ๋ฑ์Šค๋กœ ์ƒ๊ฐํ•˜๋ฉด ์ดํ•ด๊ฐ€ ๋น ๋ฅด๋‹ค. (Like ํ–‰์˜ ๋ฒˆํ˜ธ)

     

    # ํŠน์ • ๋ฐ์ดํ„ฐ ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ
    df.iloc[4,5] # 4๋ฒˆ์งธ ํ–‰์˜ 5๋ฒˆ์งธ ์ปฌ๋Ÿผ์˜ ๊ฐ’
    
    # iloc์— ์ธ๋ฑ์‹ฑ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ => ์—๋Ÿฌ
    df.iloc[0,'name'] # ์ด์™€ ๊ฐ™์ด ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์žํ˜•์„ ์ž…๋ ฅํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค.
    
    # ์Šฌ๋ผ์ด์‹ฑ ์ด์šฉํ•˜์—ฌ ์ถ”์ถœ
    df.iloc[:5,[0,2]] # ์ฒ˜์Œ๋ถ€ํ„ฐ 5๋ฒˆ์งธ๊นŒ์ง€์˜ ๋ฐ์ดํ„ฐ์™€ 1,3๋ฒˆ์จฐ ์—ด ์ถ”์ถœ

     

     

    3) ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์˜ loc ์—ฐ์‚ฐ์ž

    loc๋Š” ์•ž์„œ ๋งํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ ํ˜„์žฌ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์— ์„ค์ •๋˜์–ด์žˆ๋Š” ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ถ”์ถœํ•œ๋‹ค.

    # ํŠน์ • ๋ฐ์ดํ„ฐ ์ถ”์ถœํ•˜๊ธฐ
    df.loc[1,'Name'] # iloc์™€ ๋‹ฌ๋ฆฌ ์ธ๋ฑ์Šค๊ฐ€ ์•„๋‹Œ ๊ฐ’์„ ์ž…๋ ฅํ•  ์ˆ˜ ์•˜๋‹ค.
    
    # ์Šฌ๋ผ์ด์‹ฑ ์ด์šฉํ•˜๊ธฐ
    df.loc[2:4] # 2 ~ 4๋ฒˆ์งธ ํ–‰ ์ถ”์ถœ
    
    # df์˜ ์ธ๋ฑ์Šค๊ฐ€ ๋ฌธ์žํ˜•์œผ๋กœ ๋˜์–ด์žˆ์„ ๊ฒฝ์šฐ ์ถ”์ถœ
    df.loc['g'] # ์ธ๋ฑ์Šค๊ฐ€ ์ˆซ์žํ˜•์ด ์•„๋‹Œ ๋ฌธ์žํ˜•์ผ ๊ฒฝ์šฐ์—๋Š” ์ˆซ์ž๋ฅผ ์ด์šฉํ•ด loc๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. 
    
    df.loc['c:'] # ์ธ๋ฑ์Šค๊ฐ€ c์ธ ํ–‰์—์„œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋‹ค ์ถ”์ถœ

     

    2. ํŠน์ • ์ปฌ๋Ÿผ(col) ๋ฐ์ดํ„ฐ ์‚ดํŽด๋ณด๊ธฐ

    1 ) Unique๊ฐ’ ํ™•์ธํ•˜๊ธฐ

    # ๋ฐฉ๋ฒ• 1
    col_name.unique() # uniqueํ•œ ๊ฐ’๋“ค์„ array ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜
    
    col_name.unique()[2] # unique ๊ฐ’๋“ค ์ค‘์—์„œ 3๋ฒˆ์งธ ๊ฐ’ ๋ฐ˜ํ™˜
    
    # ๋ฐฉ๋ฒ• 2
    np.unique(list(df['col_name']))

     

     

    3. ํŠน์ • ์กฐ๊ฑด ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ถ”์ถœํ•˜๊ธฐ ; ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง

    1 ) ํŠน์ • ์กฐ๊ฑด ๋งŒ์กฑํ•˜๋Š” ์ปฌ๋Ÿผ ๊ฐ€์ ธ์˜ค๊ธฐ

    # ์ปฌ๋Ÿผ a์˜ ๊ฐ’์ด 3 ์ด์ƒ์ธ ๋ฐ์ดํ„ฐ ์ค‘์—์„œ a, c์—ด๋งŒ ์ถœ๋ ฅ
    df[df['a'] >= 3][['a','c']]
    
    # ์กฐ๊ฑด ๋งŒ์กฑ ์œ ๋ฌด๋ฅผ bool ๊ฐ’์œผ๋กœ ์ถœ๋ ฅ(์ €์žฅ)ํ•˜๊ธฐ
    _a = (df['a'] >= 3) & (df['b'] < 16) # ๊ฐ ํ–‰์ด ์ด๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์ง€์— ๋Œ€ํ•œ True, False ๊ฐ’
    
    # a ๊ฐ€ 3 ์ด์ƒ์ด๊ณ , b ๊ฐ€ 16 ๋ฏธ๋งŒ์ด๊ฑฐ๋‚˜ c ๊ฐ€ 30 ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅ
    df[(df['a'] >= 3) & ((df['b'] < 16) | (df['c'] == 30))]

     

    2 ) ํŠน์ • ์กฐ๊ฑด ๋งŒ์กฑํ•˜๋Š” ์ปฌ๋Ÿผ ์ธ๋ฑ์Šค ๊ฐ€์ ธ์˜ค๊ธฐ 

    df[df['name'] > 20].index
    
    # ์‘์šฉ -> ํ•ด๋‹น ์กฐ๊ฑด ๋งŒ์กฑํ•˜๋Š” ์ปฌ๋Ÿผ์„ ์‚ญ์ œํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ, ํ•ด๋‹น ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•˜๊ณ  df.drop(์ธ๋ฑ์Šค ๋ฆฌ์ŠคํŠธ)

     

    3 ) ๋ณต์ˆ˜ ์กฐ๊ฑด ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ถ”์ถœ (AND, OR, NOT)

    ์กฐ๊ฑด ์‹
    AND &
    OR |
    NOT ~
    • AND
    df[(df['col1'] < 100) & ~df['col2'] == 'pass')]
    # col1์˜ ๊ฐ’์ด 100 ๋ฏธ๋งŒ์ด๊ณ  col2์˜ ๊ฐ’์ด pass๊ฐ€ ์•„๋‹Œ row ํƒ์ƒ‰
    
    • OR
    df[(df['col1'] < 100) | ~df['col2'] == 30)]
    # col1์˜ ๊ฐ’์ด 100 ๋ฏธ๋งŒ์ด๊ฑฐ๋‚˜ col2์˜ ๊ฐ’์ด 30์ธ ํƒ์ƒ‰
    
    • ์กฐ๊ฑด์„ 3๊ฐœ์ด์ƒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

            → ์—ฐ์‚ฐ์ž ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ฃผ์˜ํ•ด์•ผํ•œ๋‹ค. NOT > AND > OR ์ˆœ์œผ๋กœ ๋†’์Œ.

            ๋”ฐ๋ผ์„œ ์ˆœ์„œ์— ๋”ฐ๋ผ ๋ฆฌํ„ด๋˜๋Š” ๊ฐ’์ด ๋‹ค๋ฅด๋‹ค. 

     

    4 ) Isin์œผ๋กœ ํŠน์ • ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ

    isin์˜ ์ฃผ์˜ํ•  ์ ์€, ์ฃผ์–ด์ง„ ๊ฐ’๊ณผ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

    df[df['name'].isin['Heikkinen, Miss. Laina','Dooley, Mr. Patrick']

    ๋งŒ์ผ ํŠน์ • ๋ฌธ์ž์—ด, ๊ธฐํ˜ธ ๋“ฑ์„ ํฌํ•จํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ณ ์‹ถ๋‹ค๋ฉด ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 

     

    5 ) Contains๋กœ ํŠน์ • ๋ฌธ์ž์—ด์„ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

    df[df['name'].str.contains('H')]
    # name ์ปฌ๋Ÿผ์— H๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ชจ๋‘ ๋ฐ˜ํ™˜
    ๋ฐ˜์‘ํ˜•