๊ด€๋ฆฌ ๋ฉ”๋‰ด

ruriruriya

[Python] ํŒŒ์ด์ฌ ํŒ๋‹ค์Šค(Pandas) - ๋‹ค์ค‘ ์กฐ๊ฑด์˜ ๋ฐ์ดํ„ฐ ๊ฐ’๊ณผ ํ–‰ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ณธ๋ฌธ

๐ŸPython/Pandas

[Python] ํŒŒ์ด์ฌ ํŒ๋‹ค์Šค(Pandas) - ๋‹ค์ค‘ ์กฐ๊ฑด์˜ ๋ฐ์ดํ„ฐ ๊ฐ’๊ณผ ํ–‰ ๊ฐ€์ ธ์˜ค๊ธฐ

๋ฃจ๋ฆฌ์•ผใ…‘ 2023. 11. 17. 11:19
๋ฐ˜์‘ํ˜•

์‚ฌ์ง„: Unsplash ์˜ Lukas W.

ํŒ๋‹ค์Šค์—์„œ ๋‹ค์ค‘ ์กฐ๊ฑด์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ํ•„ํ„ฐ๋งํ•˜๊ณ  ์›ํ•˜๋Š” ํ–‰์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. ๊ฐ€์žฅ ํ”ํ•œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋Š” loc ๋˜๋Š” iloc๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ํ–‰์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์•„๋ž˜์˜ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์œผ๋กœ ๋‹ค์ค‘์กฐ๊ฑด ํ•„ํ„ฐ๋ง์„ ํ•ด๋ณด์ž.

>> df = pd.DataFrame({'Employee ID':[111, 222, 333, 444],
                   'Employee Name':['Chanel', 'Steve', 'Mitch', 'Bird'],
                   'Salary [$/h]':[35, 29, 38, 20],
                   'Years of Experience':[3, 4 ,9, 1]})
>> df

ํŒ๋‹ค์Šค์˜ ๋น„๊ต์—ฐ์‚ฐ์ž

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

  1. ๋™๋“ฑ ๋น„๊ต
    • ==: ๊ฐ’์ด ๊ฐ™์€์ง€ ํ™•์ธํ•œ๋‹ค.
    • !=: ๊ฐ’์ด ๋‹ค๋ฅธ์ง€ ํ™•์ธํ•œ๋‹ค .
  2. ๋ถ€๋“ฑํ˜ธ ๋น„๊ต
    • >: ํฌ๋‹ค๋ฅผ ํ™•์ธํ•œ๋‹ค .
    • <: ์ž‘๋‹ค๋ฅผ ํ™•์ธํ•œ๋‹ค .
    • >=: ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฅผ ํ™•์ธํ•œ๋‹ค  .
    • <=: ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฅผ ํ™•์ธํ•œ๋‹ค  .
  3. ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž
    • &: ๋…ผ๋ฆฌ AND ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค  .
    • |: ๋…ผ๋ฆฌ OR ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค  .
    • ~: ๋…ผ๋ฆฌ NOT ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  4. ๋ฉค๋ฒ„์‹ญ(์†ํ•จ) ์—ฐ์‚ฐ์ž
    • in: ๊ฐ’์ด ์ปฌ๋ ‰์…˜์— ์†ํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
    • not in: ๊ฐ’์ด ์ปฌ๋ ‰์…˜์— ์†ํ•˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

 

1๊ฐ€์ง€ ์กฐ๊ฑด์˜ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

1๊ฐ€์ง€ ์กฐ๊ฑด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด Series ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.

# ๊ฒฝ๋ ฅ์ด 3๋…„ ์ด์ƒ์ธ ์‚ฌ๋žŒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค์‹œ์˜ค.
>> df['Years of Experience'] >=3
0     True
1     True
2     True
3    False
Name: Years of Experience, dtype: bool

1๊ฐ€์ง€ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ํ–‰์„ ๋ชจ๋‘ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด loc,iloc ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ–‰์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

>> df.loc[df['Years of Experience'] >=3,]

 

๋‹ค์ค‘์กฐ๊ฑด ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง

๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋กœ ๋‹ค์ค‘ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ฐ’๊ณผ ํ–‰์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
ํŒ๋‹ค์Šค์—์„œ์˜ ๋ถ€๋“ฑ์‹์„ ์กฐํ•ฉํ•  ๋• ํŒŒ์ด์ฌ, ์ž๋ฐ” ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž์™€ ๋‹ค๋ฅด๊ฒŒ ์“ด๋‹ค.
๊ทธ๋ฆฌ๊ณ (AND)๋Š” '&', ๋˜๋Š”(OR)๋Š” '|' ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๊ฒฝ๋ ฅ์ด 3๋…„ ์ดํ•˜์ด๊ฑฐ๋‚˜ 8๋…„ ์ด์ƒ์ธ ์‚ฌ๋žŒ์˜ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ค์ž.

>> (df['Years of Experience'] <=3) | (df['Years of Experience'] >=8)
0     True
1    False
2     True
3     True
Name: Years of Experience, dtype: bool
๊ฒฝ๋ ฅ์ด 3๋…„ ์ด์ƒ์ด๊ณ , ์‹œ๊ธ‰์ด 30๋‹ฌ๋Ÿฌ ์ด์ƒ์ธ ์‚ฌ๋žŒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค์‹œ์˜ค.
>> df.loc[(df['Years of Experience'] >=3) | (df['Salary [$/h]']>=30),]

 

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

loc ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•ด ํ–‰์—๋Š” ์กฐ๊ฑด๋ฌธ๊ณผ, ์—ด ๋ถ€๋ถ„์—” ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋‘๊ฐ€์ง€ ์ด์ƒ์˜ ์ปฌ๋Ÿผ๋ช…์„ ๋„ฃ๋Š”๋‹ค.

์‹œ๊ธ‰์ด ๊ฐ€์žฅ ๋†’์€ ์‚ฌ๋žŒ์˜ ์ด๋ฆ„๊ณผ ์‹œ๊ธ‰์„ ๊ฐ€์ ธ์˜ค์‹œ์˜ค.

>> df['Salary [$/h]'].max()
38
>> df['Salary [$/h]'] == df['Salary [$/h]'].max()
0    False
1    False
2     True
3    False
Name: Salary [$/h], dtype: bool
>> df.loc[df['Salary [$/h]'] == df['Salary [$/h]'].max(),['Employee Name','Salary [$/h]']]

๋ฐ˜์‘ํ˜•