[Python] 02. Filtering & Sorting

hhyun·2024년 6월 18일

[Python]

목록 보기
2/11

📖 Filtering & Sorting

메서드설명
===과 동일
df[조건]조건
reset_index()index를 0부터 정렬
df[[ 'column1', 'column2' ]]특정 컬럼으로 새로운 데이터 프레임 생성
df[(조건1) & (조건2)]논리 연산자 이용해서 필터링(and)
astype()dataType을 변경
len()문자열의 길이 반환하는 함수
iloc[:, ::2]모든 행의 짝수번째만 반환
df.loc['행', '열'] = value값 설정하는 방법
sort_values()값을 기준으로 레이블을 정렬하는 메서드 / defualt : 오름차순
sort_values(ascending=False)내림차순 기준으로 레이블을 정렬
str.contains('문자')문자가 포함하는 모든 데이터 추출
str.startswith('문자')문자로 시작하는 모든 데이터 추출
str.len()값의 길이 추출 (공백 포함)
drop_duplicates()중복행이 있으면 제거 / defualt : 첫번쨰 케이스만 유지
drop_duplicates(keep='last')중복행이 있으면 제거 후 마지막 케이스만 남기기
~not
isin()데이터 값과 일치하는 데이터 추출

🌟 Data Read

💭 Q20. Data Read

import pandas as pd 

DriverUrl : '링크'

df = pd.read_csv(DriveUrl)

# 결과 : pandas.core.frame.DataFrame

🌟 조건을 가진 데이터를 추출하여 첫 5행을 출력

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

  • 파이썬에서 ===
  • df[조건].head
  • 조건 : df['column']==3
df[df['quantity']==3].head()

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

  • reset_index() : index를 0부터 정렬
df[df['quantity']==3].head().reset_index(drop=True)

🍀 reset_index()

  • drop=True 을 하지 않는 경우 : 기존 인덱스도 함꼐 보여준다.
  • drop=True : 기존 인덱스를 drop

🌟두개의 컬럼으로 구성된 새로운 데이터 프레임을 정의

df2 = df[['column1','column2']]

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

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

🌟 특정 문자 제거

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

  • df['new_column'] : df에 새로운 컬럼을 정의
  • str[1:] : 문자열의 2번째자리부터 추출
  • astype('float') : dataType을 float으로 변경
  • Ans: 새로운 개체
df['new_price'] = df['item_price'].str[1:].astype('float')
Ans = df['new_price'].head()
Ans

🌟 갯수 구하기

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

  • len : 문자열의 길이 반환하는 함수
len(df[df['new_price'] <=5])

🌟 index 값을 초기화

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

  • df.column == df[column] 동일한 기능
    • df[column] : 컬럼명에 공백 있든 없든 가능
    • df.column : 컬럼명에 공백없을때만 가능
df.loc[df.item_name =='Chicken Salad Bowl'].reset_index(drop=True)

🌟 데이터 프레임을 추출

  • 두가지 이상의 조건은 []안에 ()로 묶고 소괄호안은&로 묶는다.

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

Ans = df.loc[(df.item_name =='Chicken Salad Bowl') & (df.new_price <= 9)]
Ans.head()

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

  • ::2 : 짝수
Ans = df.iloc[:,::2]
Ans.head(5)

🌟 index를 초기화

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

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

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

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

🌟 중복행 있으면 제거 & 케이스 남기기

  • 조건 : df의 item_name 컬럼 값이 Steak Salad 또는 Bowl 인 데이터를 데이터 프레임화 한 후, item_name를 기준으로 중복행이 있으면 제거
  • drop_duplicates : 중복행이 있으면 제거
  • keep='last' : 마지막 케이스는 유지

💭 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')
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')
Ans.head()

🌟 데이터 인덱싱

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

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

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

  • mean() : 평균값
Ans = df.loc[df.new_price >= df.new_price.mean()]
Ans.head()

🌟 데이터 값 수정

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

loc[df.칼럼이름 =='행','열'] = 'txt`
df.loc[df.item_name =='Izze','item_name'] = 'Fizzy Lizzy'
Ans = df
Ans.head(3)

🌟 결측치(Null 값)

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

Ans = df.choice_description.isnull().sum()
Ans

💭 Q38. df의 데이터 중 choice_description 값이 NaN 인 데이터를 NoData 값으로 대체

  • 조건 : loc 이용
df.loc[df.choice_description.isnull(),'choice_description'] ='NoData'
Ans = df
Ans.head()

🌟 str. 함수

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

  • str.contains('Chips') : Chips 포함된 모든 데이터
Ans = df.loc[df.item_name.str.contains('Chips')]
Ans.head()

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

  • str.contains('Black') : Black 포함된 모든 데이터
#list에 묶고 1번만 추출
# list(Ans['choice_description'])[1]

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

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

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

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

  • startswith('N') : N으로 시작하는 말
Ans = df[df.item_name.str.startswith('N')]
Ans.head()

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

Ans = df[df.item_name.str.len() >=15]
Ans.head()

🌟 isin()

💭 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)]
display(Ans.head(3))
print(len(Ans))

0개의 댓글