📖 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)
🌟 조건을 가진 데이터를 추출하여 첫 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(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의 짝수번째 컬럼만을 포함하는 데이터프레임 출력
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값의 평균값 이상을 가지는 데이터들을 인덱싱
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 값으로 대체
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 포함된 모든 데이터
Ans = df[df.choice_description.str.contains('Black')]
Ans.head()
💭 Q40. df의 데이터 중 choice_description 값에 Vegetables 들어가지 않는 경우의 갯수를 출력
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))