2024.07.12
🔒 20번) 데이터를 로드하라
DataUrl : 'https://raw.githubusercontent.com/Datamanim/pandas/main/chipo.csv'
🔓 해결 방법
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/Datamanim/pandas/main/chipo.csv')
df
🔒 21번) quantity 컬럼 값이 3인 데이터를 추출하고 첫 5행을 출력하라
quantity 컬럼 중에 값이 3인 데이터들만 추출, 그리고 위에서부터 5행만 출력
🔓 해결 방법
df[df['quantity'] == 3].head(5)
df['quantity'] == 3
먼저 요것의 뜻은.. 데이터 값이 3인 것들을 boolean 값으로 반환한다는 의미이다.
그래서 결과를 보면 이렇게 boolean 으로 표현되는 걸 볼 수 있다.
df[df['quantity'] == 3]
그리고 이중에 True에 해당하는 것들만 데이터 프레임으로 반환한다.
.head( )를 써서 상위 5개 행만 출력하면 끝!
df.loc[df['quantity'] == 3].head(5)
여기서 .loc[]를 써주는 것을 습관처럼 하자고 하셨는데.. 아직 이유에 대해서는 못들었다..
그래서 일단은 .loc[ ]와 .iloc[ ]에 대한 내용과 차이를 찾아 공부하고 따로 정리를 해봐야겠다.
🔒 22번) quantity 컬럼 값이 3인 데이터를 추출하여 index를 0부터 정렬하고 첫 5행을 출력하라
quantity 컬럼 중에 값이 3인 데이터들만 추출, 그리고 위에서부터 5행만 출력하는데 index를 리셋 시키기!
🔓 해결 방법
df.loc[df['quantity'] == 3].head(5).reset_index(drop=True)
이전 시간에 배웠던 .reset_index(drop=True)를 사용하여 결과를 도출해냈다.
🔒 23번) quantity, item_price 두 개의 컬럼으로 구성된 새로운 데이터 프레임을 정의하라
quantity와 item_price로만 이루어진 데이터 프레임 추출
🔓 해결 방법
new_df = df[['quantity', 'item_price']].copy()
new_df
새로운 데이터 프레임 변수를 지정하고,
데이터프레임 형식으로 두 컬럼의 이름을 적어 준 뒤, 데이터를 카피해서 변수를 출력했다.
.copy( ) 는 복사 해주는 역할인데 이것도 따로 정리를 해야할 것 같다.
df['quantity', 'item_price']
처음에는 이렇게 [ ]로 안감싸주니 오류가 났는데,
이유가 저 상태는 시리즈 타입인 상태여서 그랬다.
시리즈는 작은 단위이기 때문에 컬럼을 다중으로 포함시키지 못한다고 한다.
그래서 두 개 이상의 컬럼을 보이기 위해 더 큰 단위인 데이터프레임 타입으로 출력을 해야 했다.
근데 짜피 데이터프레임을 정의하라고 그랬음 ㅎ
🔒 24번) item_price 컬럼의 달러 표시 문자를 제거하고 float 타입으로 저장하여 new_price 컬럼에 저장
먼저 item_price 컬럼의 타입 확인하고 달러 표시를 제거 후 float 타입으로 변경시킨 뒤, 새로운 컬럼에 저장!
🔓 해결 방법
이 녀석은 어떤 타입인가?
df['item_price'].info()
dtypes가 object다! 명백히 float으로 바꿔줄 필요가 있음!
df['item_price'].replace('$', '')
.replace('교체 대상 문자', '원하는 문자') 를 이용하여 없애고 싶은 문자를 공백으로 처리해서 제거할 수 있다!
그런데! 여기서 이 상태로는 결과가 바뀌지 않는다!
왜냐?
이 method는 해당 컬럼의 값이 딱 '$'인 경우일 때만 문자를 교체해주더라!
고래서 이 값이 전부 문자임을 표시해주고 그 안에서 $ 표시를 공백으로 교체 해주면서 없애버리기로 했다.
df['item_price'].str.replace('$', '')
.str 을 써주니 원하는 대로 달러 표시가 사라졌다!
df['item_price'].str[1:]
다른 방법으로 굳이 교체를 쓰지 않고 출력을 제한시킬 수 있다.
문자열 1번부터 끝까지만 출력하라고 편집해버리는 방식!
결과는 똑같이 나온다.
df['item_price'].str.replace('$', '').astype(float)
그리고 실수형으로 바꾸기 위해서
.astype( ) 을 이용하여 바꿔줬다.
df['new_price'] = df['item_price'].str.replace('$', '').astype(float)
df
이제 새로운 컬럼인 'new_price'에 $ 표시 제거된 것과 float 형으로 바뀐 것을 담아서 출력을 시킨다.
정보를 확인했을 때 new_price 컬럼의 dtype이 실수형인 것을 확인할 수 있다.
🔒 25번) new_price 컬럼이 5이하의 값을 가지는 데이터프레임을 추출, 전체 개수 구하기
new_price 컬럼 중 값이 5이하, 전체 개수
🔓 해결 방법
df.loc[df['new_price'] <= 5]
일단 값이 5 이하인 것들만 추출
len(df.loc[df['new_price'] <= 5])
# 1652
len()을 사용하여 개수를 확인하기
df.loc[df['new_price'] <= 5].shape
다른 방법으로는 .shape( )을 통해 행과 열의 개수를 출력후 인덱싱을 통해 행의 개수를 출력할 수 있다.
df.loc[df['new_price'] <= 5].shape[0]
# 1652
🔒 26번) item_name명이 Chicken Salad Bowl 인 데이터 프레임을 추출하고 index 값을 초기화 하여라
Chicken Salad Bowl 인 것만 추출하고 인덱스 값 초기화
🔓 해결 방법
df.loc[['item_name'] == 'Chicken Salad Bowl'].reset_index(drop=True)
Chicken Salad Bowl 과 정확히 대문자, 소문자, 공백이 일치한 것만 가져온다.
🔒 27번) new_price값이 9 이하이고 item_name 값이 Chicken Salad Bowl 인 데이터 프레임을 추출하라
new_price 값이 <= 9, item_name 값이 ' Chicken Salad Bowl' 인 데이터 프레임 추출
🔓 해결 방법
df.loc[(df.new_price <= 9) & (df.item_name == 'Chicken Salad Bowl')]
조건이 여러 개여서 ( ) 괄호로 감싸서 조건에 알맞게 작성하면 된다.
& : 교집합
| : 합집합
🔒 28번) df의 new_price 컬럼 값에 따라 오름차순으로 정리하고 index를 초기화 하여라
컬럼 값에 따른 오름차순 정렬과 인덱스 초기화하기
🔓 해결 방법
df.sort_values('new_price').reset_index(drop=True)
.sort_values 써서 정렬을 해주고 똑같이 .reset_index(drop=True)로 초기화
만약에 내림차순으로 정렬을 한다면?
df.sort_values('new_price', ascending=False).reset_index(drop=True)
ascending=False 를 입력해준다. True인 경우가 오름차순으로 디폴트이다.
🔒 29번) df의 item_name 컬럼 값중 Chips 포함하는 경우의 데이터를 출력하라
Chips를 포함하는 데이터 출력하기
🔓 해결 방법
df.loc[df['item_name'].str.contains('Chips')]
.str.contains( ) 을 이용하여 특정 문자열이 포함된 값을 추출해낼 수 있다.
🔒 30번) df의 짝수번째 컬럼만을 포함하는 데이터프레임을 출력하라
짝수 번째 컬럼들만 모은 데이터프레임 출력하기
🔓 해결 방법
df.iloc[:, ::2]
df.iloc[:, 시작:끝:스텝]
시작은 0, 끝은 -1, 간격 2 인데 맨처음과 끝은 숫자를 생략해도 된다. (0도 짝수로 생각)
홀수 번째 컬럼들만 출력하고 싶으면,
df.iloc[:, 1::2]
시작을 1번부터 해주면 홀수 번째 컬럼들이 출력된다.
'📒 Today I Learn > 🐼 Pandas' 카테고리의 다른 글
[Pandas] Apply & Map (0) | 2024.07.17 |
---|---|
[Pandas] Pandas? (0) | 2024.07.17 |
[Pandas] Filtering & Sorting (2) (0) | 2024.07.15 |
[Pandas] Getting & Knowing Data (2) (0) | 2024.07.11 |
[Pandas] Getting & Knowing Data (1) (0) | 2024.07.10 |