[실습] Python : 02. Filtering & Sorting

yeppi1802·2024년 6월 21일

개념정리

Filtering

Q20. 데이터를 로드하라.

import pandas as pd
# DataUrl = 'Github 자료주소'
DriveUrl = 'DriveUrl_자료주소'
df = pd.read_csv(DriveUrl)
type(df)
df.head()
# 상위 5행 출력

Q21. quantity컬럼 값이 3인 데이터를 추출하여 첫 5행을 출력하라

df[df['quantity']==3].head()
# df[조건 값] : df에서 조건 값을 만족하는 데이터를 가져오겠다.
# 해당행의 인덱스 값이 출력됨 

Q22. quantity컬럼 값이 3인 데이터를 추출하여 index를 0부터 정렬하고 첫 5행을 출력하라

df.loc[df['quantity']==3].head()**.reset_index(drop=True)**
# reset_index : 인덱스 리셋
# drop=True : 기에 있는 인덱스를 삭제함
  • drop=True가 없는 경우, 기존에 있는 인덱스가 컬럼으로 생성 된다.

Q23. quantity , item_price 두개의 컬럼으로 구성된 새로운 데이터 프레임을 정의하라

df2 = df**[['quantity','item_price']]**
# 문법 : df[[ 'column1', 'column2' ]] - 대괄호 두번 
# 특정 컬럼만 가지고 새로운 테이블 생성
df2.head()

Q24. item_price 컬럼의 달러표시 문자를 제거하고 float 타입으로 저장하여 new_price 컬럼에 저장하라

# 문자열타입 'item_price'를 float 타입으로 변경
# -> quantity * item_price 하기 위해서는 문자열X, only 숫자형만! 
# 전처리 과정 
df['new_price'] = df['item_price'].str[1:].astype('float')
# df['new_price'] : 기존에 없었던 컬럼 정의
# df['item_price'].str[1:] : item_price의 1번 인덱스부터 가져 오겠다.
# -> $2.39 면 2가 1번 인덱스!
# astype('float') : float 형태로 전환 
 
Ans = df['new_price'].head()
Ans

Q25. new_price 컬럼이 5이하의 값을 가지는 데이터프레임을 추출하고, 전체 갯수를 구하여라

len(df[df['new_price'] <=5])
# len : 갯수를 구함 

Q26. item_name명이 Chicken Salad Bowl 인 데이터 프레임을 추출하고 index 값을 초기화 하여라

df.loc[df.item_name =='Chicken Salad Bowl'].reset_index(drop=True)
# df.columnname = df['columnnae'] - 같은 결과 다른 표현
# -> 주로 컬럼에 띄어쓰기가 있는 경우 [] 사용
# iloc : 순서, 위치 기반 인덱싱 
# loc : 값 기준 인덱싱 

Q27. new_price값이 9 이하이고 item_name 값이 Chicken Salad Bowl 인 데이터 프레임을 추출하라

Ans = df.loc[(df.item_name =='Chicken Salad Bowl') & (df.new_price <= 9)]
# 조건 2개 : [(condition1) & (condition2)]
Ans.head()

Sorting

Q28. df의 new_price 컬럼 값에 따라 오름차순으로 정리하고 index를 초기화 하여라

Ans = df.sort_values('new_price').reset_index(drop=True)
# sort_values('columnname') : sort 하기 위해 사용하는 함수 
# default 오름차순 
# 같은 값이면 적재되었던 기존 정렬을 기준으로 정렬됨 
Ans.head()

Q29. df의 item_name 컬럼 값중 Chips 포함하는 경우의 데이터를 출력하라

Ans = df.loc[df.item_name.str.contains('Chips')]
# str.contains('Chips') : Chips 문자가 포함한 모든 데이터 추출
Ans.head()

Q30. df의 짝수번째 컬럼만을 포함하는 데이터프레임을 출력하라

Ans = df.iloc[:,::2]
# 문법 iloc[:,::2] - ::2면 짝수번째 컬럼만 가져와라 
Ans.head(5)

Q31. df의 new_price 컬럼 값에 따라 내림차순으로 정리하고 index를 초기화 하여라

Ans = df.sort_values('new_price',ascending=False).reset_index(drop=True)
# df.sort_values('new_price',ascending=False)
# 'new_price' 기준으로 ascending=False : 내림차순
Ans.head()

Q32. df의 item_name 컬럼 값이 Steak Salad 또는 Bowl 인 데이터를 인덱싱하라

Ans = df.loc[(df.item_name =='Steak Salad') | (df.item_name =='Bowl')]
# | : 또는 
# (df.item_name =='Steak Salad') | (df.item_name =='Bowl')
# -> 두가지 조건은 소괄호!
Ans.head()

Q33. 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')
# 중복행 제거
# drop_duplicates : 중복을 제거하는 함수
# default 값 : 첫번째 케이스 남김

Ans.head()

Q34. 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')
# drop_duplicates('item_name',keep='last')
# keep='last' : 마지막 케이스 남김 

Ans.head()

Q35. df의 데이터 중 new_price값이 new_price값의 평균값 이상을 가지는 데이터들을 인덱싱하라

Ans = df.loc[df.new_price >= df.new_price.mean()]
# mean() : 평균값 함수 
# mean()이상인 데이터 가져와!
Ans.head()

Q36. df의 데이터 중 item_name의 값이 Izze 데이터를 Fizzy Lizzy로 수정하라

df.loc[df.item_name =='Izze','item_name'] = 'Fizzy Lizzy'
# loc : 그 값에 접근할때 사용
# loc[row's condition , column]
Ans = df
Ans.head(3)
Ans.loc[df.item_name =='Fizzy Lizzy','item_name']

Q37. df의 데이터 중 choice_description 값이 NaN 인 데이터의 갯수를 구하여라

Ans = df.choice_description.isnull().sum()
# df에 choice_description의 null값의 갯수 
# isnull() : null 값
# sum() : 몇개?
Ans

Q38. df의 데이터 중 choice_description 값이 NaN 인 데이터를 NoData 값으로 대체하라(loc 이용)

df.loc[df.choice_description.isnull(),'choice_description'] ='NoData'
# loc[조건,컬럼] = 변경하는 
Ans = df
Ans.head()

Q39. df의 데이터 중 choice_description 값에 Black이 들어가는 경우를 인덱싱하라

# Black이 들어간 데이터가 보이지 않아 밑 코드로 검색헤봄
# list(Ans['choice_description'])[1]

Ans = df[df.choice_description.str.contains('Black')]
# 하나의 조건을 만족할때는 loc 안써고 됨!
Ans.head()

Q40. df의 데이터 중 choice_description 값에 Vegetables 들어가지 않는 경우의 갯수를 출력하라

Ans = len(df.loc[~df.choice_description.str.contains('Vegetables')])
# ~ : not
Ans

Q41. df의 데이터 중 item_name 값이 N으로 시작하는 데이터를 모두 추출하라

Ans = df[df.item_name.str.startswith('N')]
# str.startswith('N') : N으로 시작하는 값을 찾는 명령어 
Ans.head()

Q42. df의 데이터 중 item_name 값의 단어갯수가 15개 이상인 데이터를 인덱싱하라

Ans = df[df.item_name.str.len() >=15]
# str.len() : 값의 길이 
# 공백 포함 
Ans.head()

Q43. 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)]
# isin() : 리스트 형태를 넣으면 거기에 해당하는 데이터를 찾아주는 함수
display(Ans.head(3))
print(len(Ans))

0개의 댓글