02 Filtering & Sorting

์ •ํ•œ๋ณ„ยท2024๋…„ 6์›” 22์ผ
0

๐Ÿ“Œ ์ฐธ๊ณ 

Filtering- ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ•„ํ„ฐ๋งํ•ด์„œ ๋ณด๊ฒ ๋‹ค
sorting- ์ •๋ ฌ
type(df) - ๊ฐ์ฒด์˜ ํƒ€์ž…ํ™•์ธ

โœ”๏ธ quantity์ปฌ๋Ÿผ ๊ฐ’์ด 3์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜์—ฌ index๋ฅผ 0๋ถ€ํ„ฐ ์ •๋ ฌํ•˜๊ณ  ์ฒซ 5ํ–‰์„ ์ถœ๋ ฅํ•˜๋ผ

df.loc[df['quantity']==3].head().reset_index(drop=True)


โ†ช๏ธ drop=True-๊ณผ๊ฑฐ์˜ ์ธ๋ฑ์Šค๋“ค์„ ์‚ญ์ œํ•ด์ค€๋‹ค.

โœ”๏ธ quantity , item_price ๋‘๊ฐœ์˜ ์ปฌ๋Ÿผ์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ •์˜ํ•˜๋ผ

โ†ช๏ธ ํŠน์ • ์ปฌ๋Ÿผ๋งŒ ๊ฐ€์ ธ์™€์„œ ํ…Œ์ด๋ธ”์„ ๊พธ๋ฆฌ๊ณ  ์‹ถ์„ ๋•Œ

df2 = df[['quantity','item_price']]
df2.head()


โ†ช๏ธ '$'๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด ๋ฌธ์ž์—ด์ด ๋œ๋‹ค.

โœ”๏ธitem_price ์ปฌ๋Ÿผ์˜ ๋‹ฌ๋Ÿฌํ‘œ์‹œ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  float ํƒ€์ž…์œผ๋กœ ์ €์žฅํ•˜์—ฌ new_price ์ปฌ๋Ÿผ์— ์ €์žฅํ•˜๋ผ

df['item_price'].str[0:3]


โ†ช๏ธ 0๋ฒˆ์งธ ๊ฐ’์€ ๋ญ˜๊นŒ '$'๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค

df['new_price'] = df['item_price'].str[1:].astype('float')
Ans = df['new_price'].head()
Ans

โ†ช๏ธ
1. '$'๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด ๋ฌธ์ž์—ด์ด ๋˜์„œ ๋‚˜์ค‘์— ๋ฐ์ดํ„ฐ์—์„œ ์ˆซ์ž์™€ ๋ฌธ์ž๋ฅผ ๊ณฑํ•˜๋Š” ํ˜•ํƒœ๊ฐ€ ๋˜์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์ œ๊ฑฐ๋ฅผ ํ•ด์ค€๋‹ค.
2. new_price - ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‚ด๊ฐ€ ์ „์— ์—†์—ˆ๋˜ ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ์ •ํ•ด์ค€๋‹ค
3. astype - float ํƒ€์ž…์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

โœ”๏ธ new_price ์ปฌ๋Ÿผ์ด 5์ดํ•˜์˜ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ์ถ”์ถœํ•˜๊ณ , ์ „์ฒด ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•˜์—ฌ๋ผ

len(df[df['new_price'] <=5])

1652
โ†ช๏ธ len - ๊ฐฏ์ˆ˜๋ฅผ ์„ธ๊ฒ ๋‹ค๋Š” ๋ช…๋ น์–ด

โœ”๏ธ item_name๋ช…์ด Chicken Salad Bowl ์ธ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ์ถ”์ถœํ•˜๊ณ  index ๊ฐ’์„ ์ดˆ๊ธฐํ™” ํ•˜์—ฌ๋ผ

df.loc[df.item_name =='Chicken Salad Bowl'].reset_index(drop=True)

๐Ÿ“Œ ์ฐธ๊ณ 

  1. df['new price'] ์ด๋ ‡๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋„ ์žˆ๊ณ  df.item_name ์ด๋ ‡๊ฒŒ ์ปฌ๋Ÿผ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค.
  2. 1์˜ ์ƒํ™ฉ์€ ๊ณต๋ฐฑ์ด ์žˆ๋Š” ์ปฌ๋Ÿผ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์“ฐ๊ณ  2๋ฒˆ์งธ๋Š” ๊ณต๋ฐฑ์ด ์—†๋Š” ์ปฌ๋Ÿผ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉ
  3. loc - ๊ฐ’๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ธ๋ฑ์‹ฑํ•œ๋‹ค.
  4. 2๊ฐ€์ง€ ์ด์ƒ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ ค๊ณ  ํ• ๋•Œ๋Š” ๊ฐ์กฐ๊ฑด์„ ์†Œ๊ด„ํ˜ธ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฌถ์–ด์ค˜์•ผํ•œ๋‹ค.

โœ”๏ธ df์˜ new_price ์ปฌ๋Ÿผ ๊ฐ’์— ๋”ฐ๋ผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ฆฌํ•˜๊ณ  index๋ฅผ ์ดˆ๊ธฐํ™” ํ•˜์—ฌ๋ผ

Ans = df.sort_values('new_price').reset_index(drop=True)
Ans.head(10)


โ†ช๏ธ sorting์€ ํฌ๊ฒŒ ์˜ค๋ฆ„์ฐจ์ˆœ๊ณผ ๋‚ด๋ฆผ์ฐจ์ˆœ์ด ์žˆ๋‹ค.
sortingํ• ๋•Œ๋Š” sort_values๋ผ๋Š” ๋ช…๋ น์–ด ์‚ฌ์šฉ ๊ทธ๋ฆฌ๊ณ  ๋””ํดํŠธ๊ฐ€ ์˜ค๋ฆ„์ฐจ์ˆœ์ด๋ผ ํ• ๋‹น ์•ˆํ•ด์ค˜๋„ ๋œ๋‹ค.

๐Ÿ“Œ ์ฐธ๊ณ 

  1. str.contains ๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  2. ::2-์ง์ˆ˜๋งŒ ๊ฐ€์ ธ์˜ค๊ฒ ๋‹ค๋Š” ๋œป
  3. ascending=False-๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ์„ ํ•˜๊ฒ ๋‹ค๋Š” ๋œป
  4. ์ธ๋ฑ์‹ฑํ•˜๋ผ= ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์•„๋ผ, | = ๋˜๋Š”

โœ”๏ธdf์˜ item_name ์ปฌ๋Ÿผ ๊ฐ’์ด Steak Salad ๋˜๋Š” Bowl ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ํ™” ํ•œ ํ›„, item_name๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ค‘๋ณตํ–‰์ด ์žˆ์œผ๋ฉด ์ œ๊ฑฐํ•˜๋˜ ๋งˆ์ง€๋ง‰ ์ผ€์ด์Šค๋งŒ ๋‚จ๊ฒจ๋ผ

Ans = df.loc[(df.item_name =='Steak Salad') | (df.item_name =='Bowl')]
Ans = Ans.drop_duplicates('item_name',keep='last')
Ans.head()


โ†ช๏ธ

  1. ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ํ™” ํ•œ ํ›„-> ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” 2์ฐจ์› ๋ฐ์ดํ„ฐ๋กœ ๋งŒ๋“ค๋ผ๋Š” ๋ง
  2. ์šฐ๋ฆฌ๊ฐ€ ๋ถ„์„ํ•ด์•ผ๋˜๋Š” ๋ฐ์ดํ„ฐ ์ค‘์— ์ค‘๋ณต๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ์•ˆ๋œ๋‹ค.
    ๋˜‘๊ฐ™์€ ๋ฐ์ดํ„ฐ์ธ๋ฐ ์ค‘๋ณต์œผ๋กœ ๋“ค์–ด๊ฐ์œผ๋กœ์จ ํ•ด์„์„ ํ•  ๋•Œ ๋ชจ๋ธ์— ๋Œ€ํ•œ ์˜คํ•ด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต์ œ๊ฑฐ๋ฅผ ํ•œ๋‹ค.
  3. drop_duplicates๋กœ ์ค‘๋ณต์ œ๊ฑฐ
  4. 'item_name' -์ด๊ฑธ ์ ์—ˆ์„ ๋•Œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฒซ๋ฒˆ์งธ ๊ฐ’์„ ๋‚จ๊ธฐ๊ณ  ์ค‘๋ณต์ œ๊ฑฐ๋ฅผ ํ•œ๋‹ค๋Š” ๋œป

๐Ÿ“Œ ์ฐธ๊ณ 

  1. mean() - ํ‰๊ท ์ด๋ผ๋Š” ๋ช…๋ น์–ด
  2. loc - ์ธ๋ฑ์Šค์˜ ์ˆœ์„œ,์ปฌ๋Ÿผ์ด ๋ช‡๋ฒˆ์งธ ์œ„์น˜ํ•ด์žˆ๋Š”์ง€, ํ–‰์ด ๋ช‡๋ฒˆ์งธ ์œ„์น˜์— ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด์„œ ์ ‘๊ทผํ•  ๋•Œ ์“ด๋‹ค. -> ๊ทธ ๊ฐ’์— ์ ‘๊ทผํ•  ๋•Œ ๋งŽ์ด ์“ด๋‹ค.
  3. isnull().sum() -ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ๋ช…์— ๋Œ€ํ•ด์„œ๋งŒ ์ถœ๋ ฅ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ์จ์คŒ
  4. isnull() - ๋„ ๊ฐ’์ธ ์กฐ๊ฑด

df์˜ ๋ฐ์ดํ„ฐ ์ค‘ choice_description ๊ฐ’์— Black์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ๋ฅผ ์ธ๋ฑ์‹ฑํ•˜๋ผ

list(Ans['choice_description'])[1]

[Clementine]

โ†ช๏ธ list-ํ•˜๋‚˜์˜ ๋ฆฌ์ŠคํŠธ ํ˜•์‹์œผ๋กœ ํ•ด์„œ ์ฒซ๋ฒˆ์งธ ๊ฐ’์— ์ ‘๊ทผํ•ด ๋ณธ ๊ฒƒ

Ans = df[df.choice_description.str.contains('Black')]
Ans.head()


โ†ช๏ธ loc์“ฐ๋Š” ๊ฑด ์„ ํƒ์ด๋‹ค ํ•˜๋‚˜์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ• ๋•Œ๋Š” ์•ˆ์จ๋„ ๋œ๋‹ค.

๐Ÿ“Œ ์ฐธ๊ณ 

  1. '~' -not์ด๋ผ๋Š” ๋ง
  2. str.startswith() - ~๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ ์ฐพ๋Š” ๋ช…๋ น์–ด
  3. str.len()-item name์˜ ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์คŒ(๊ณต๋ฐฑ ํฌํ•จ)

โœ”๏ธ df์˜ ๋ฐ์ดํ„ฐ ์ค‘ new_price๊ฐ’์ด lst์— ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ์˜ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„์„ ๊ตฌํ•˜๊ณ  ๊ทธ ๊ฐฏ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋ผ lst =[1.69, 2.39, 3.39, 4.45, 9.25, 10.98, 11.75, 16.98]

lst =[1.69, 2.39, 3.39, 4.45, 9.25, 10.98, 11.75, 16.98]
Ans = df.loc[df.new_price.isin(lst)]
display(Ans.head(3))
print(len(Ans))


โ†ช๏ธ

  1. isin() -์•ˆ์— ๋ฆฌ์ŠคํŠธ์˜ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ฃผ๊ฒŒ ๋˜๋ฉด ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ํ•œ๋ฒˆ์— ์ฐพ์•„์ค€๋‹ค.
  2. display() - ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„ํ™”ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๋Š” ๊ฒƒ
  3. display์™€ print๋ฅผ ๊ฐ™์ด ์“ฐ๊ฒŒ๋˜๋ฉด 1393์ด๋ผ๋Š” ํ…์ŠคํŠธ๋„ ์ถœ๋ ฅ์„ ํ•ด๋ณผ ์ˆ˜๋„ ์žˆ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ๋ณด๊ณ  ์‹ถ์€ ๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ž„๋„ ํ•œ๋ฒˆ์— ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด