본문 바로가기

제로베이스/Python

Python 2. Filtering & Sorting

파이썬 기초 익히기2

 

Q20. 데이터 로드

import pandas as pd
DriveUrl = 'https://drive.google.com/~'
df = pd.read_csv(DriveUrl)
type(df)

 

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

#1 
df[df['quantity']==3].head()
#2 
df[df.quantity==3].head()
df 컬럼 지정할 때 2가지 방법이 있음
    1. df['column_name'] :공백이 있을 때도 사용 가능
    2. df.column_name : 공백이 있는 이름은 사용 불가능

 

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

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

 

✔ loc[ ]: 값을 기준으로 데이터를 인덱싱(단일 조건일 땐 안써도 ok)
drop = True는 원래 있었던 인덱스는 지우고 새로운 인덱스 입력할 수 있게!
 위 옵션을 안쓰면 기존 인덱스가 index라는 새로운 컬럼으로 생성됨

 

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

df2 = df[['quantity','item_price']]
df2.head()
2개 이상의 컬럼을 불러올 때는 컬럼들을 대괄호로 묶어줘야 함

 

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

df['new_price'] = df['item_price'].str[1:].astype('float')
Ans = df['new_price'].head()
Ans
기존 item_price는 달러표시로 문자열임
 str[1:]로 달러표시 이후(첫번째 문자 이후) 숫자들을 불러오고 astype을 통해 float 타입으로 변경

 

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)

 

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

Ans = df.loc[(df.item_name == 'Chicken Salad Bowl') & df.new_price <= 9)]
Ans.head()
✔ 조건이 여러개이면 소괄호로 조건 하나씩 독립적으로 묶어줘야 함
✔ and 조건 -> &으로

 

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

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

 

 

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

Ans = df.loc[df.item_name.str.contains('Chips')]
Ans.head()

 

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

Ans = df.iloc[:,::2]
Ans.head(5)
더보기
  • 해당내용은 파이썬의 슬라이싱기법임
  • a[ start : end : step ]
  • step이 양수일 때: 오른쪽으로 step만큼 이동하면서 가져옵니다.
  • step이 음수일 때: 왼쪽으로 step만큼 이동하면서 가져옵니다.
    : : 2 라는 의미는 처음부터 끝까지 2칸씩 띄어서 값을 가져오는 것이고

       홀수를 가져오려면 1번부터 두칸씩 띄어서 가져오게 만들 수 있다.

# 짝수 컬럼
Ans = df.iloc[:,::2]
Ans.head()
# 홀수 컬럼 
Ans = df.iloc[:,1::2]
Ans.head()

 

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

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

 

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

Ans = df.loc[(df.item_name == 'Steak Salad') | (df.item_name =='Bowl')]
Ans.head()
✔ or은  -> | 으로

 

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()

 

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로 수정하라

df.loc[df.item_name == 'lzze','item_name'] = 'Fizzy Lizzy'
Ans = df
Ans.head(3)
단일 조건을 셀렉션할때는 loc 안 써도 ok
행과 열에 대해서 독립적인 필터링 조건이 있을 때는 loc 필요함

 

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()

 

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

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

 

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

Ans = len(df.loc[~df.choice_description.str.contaiins('Vegetables')])
Ans
 not조건은 -> ~로

 

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

Ans = df[df.item_name.str.startswitch('N')]
Ans.head()

 

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

Ans = df.loc[df.item_name.str.len() >= 15]
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)]
display(Ans.head(3))
print(len(Ans))
 display와 print를 같이 쓰면 데이터프레임과 텍스트를 함께 볼 수 있음

'제로베이스 > Python' 카테고리의 다른 글

Python 6. Pivot  (0) 2024.06.29
Python 5. Time_Series  (0) 2024.06.29
Python 4.Apply, Map  (0) 2024.06.28
python3. Grouping  (0) 2024.06.28
Python 1. Getting & Knowing Data  (0) 2024.06.27