df.isnull().sum()
df.dropna()
# 같은표현
df.dropna(axis = 0, how = 'any')
# 결측치가 있는 열 제거
df.dropna(axis=1)
# 결측치 제거 후 결과 저장
df.dropna(inplace = True)
# 결측치 제거 체크
df.isnull().sum() # 0으로 나와야 함
method = ffill
/ bfill
df['컬럼명'].fillna('대체할값')
# 평균값
df['컬럼명'].fillna(df['컬럼명'].mean)
# 중앙값
df['컬럼명'].fillna(df['컬럼명'].median)
# 바로 위 값으로 대체
df['컬럼명'].fillna(method = 'ffill')
# 바로 아래 값으로 대체
df['컬럼명'].fillna(method = 'bfill')
정규분포 기반(Z-Score)
StandardScaler().fit_transform()
활용비정규분포 기반(IQR)
Q1 - 1.5*IQR
, Q3 + 1.5*IQR
바깥 값 제거머신러닝 기반
제거
데이터 오류나 적절하지 않은 값일 경우 제거
⚠️데이터 표본 크기 줄어들 수 있음
대체
분리
새로운 데이터 프레임 생성하여 이상치 저장 > 별도 분석
🔗 참고자료
실습으로 익히는 Python 1,2회차
실습으로 익히는 Python 3,4회차
데이터 전처리&시각화 3주차
pandas 10분 완성
필수 1) 데이터 불러오기
import pandas as pd
import numpy as np
import time
import datetime as dt
나는 구글드라이브를 사용하지 않는 관계로 드라이브 마운트 코드는 주석처리로 달았다.
#from google.colab import drive
#drive.mount('/content/drive')
df = pd.read_csv(r"경로는비밀/flight_data_homework.csv")
df.shape
df.head()
필수 2) 결측치 처리
df.isnull().sum()
df = df.dropna()
#결측치 제거 확인
df.isnull().sum()
필수 3) 조건에 맞는 데이터 추출하기
(소수점 첫번째 자리까지 표현)
이건 두 가지로 구했음
df[['Price', 'Destination']].groupby('Destination').agg(['mean','median']).round(1)
df.groupby('Destination')[['Price']].agg(['mean', 'median']).round(1)
처음에는 그냥 ['Price']
로 작성했었는데 Price
컬럼이 전처리 강의자료 기준처럼 노출이 되지 않아서 동진님한테 여쭤보니까 대괄호를 씌워보라고 하셔서 그렇게 쓰니까 완전히 똑같아졌다
결과값은 같지만, 혹 차이가 있는걸까?😅
(df2 라는 dataframe으로 받기)
이것도 문제가 조금 헷갈렸다 구글링해보니 중복값 없이 추출하는 방법이 여러가지라서.. 일단 둘 다 제출했음
drop_duplicates()
사용 df2 = df[['Airline', 'Total_Stops', 'Route']].drop_duplicates().reset_index(drop=True)
# 확인용 코드
df2
unique()
사용리스트로 모아서? 반환되는 것 같아서 구글링
explode()
를 쓰면 리스트를 풀어서 행으로 전개해준다고함
🔗 리스트 형태의 값 전개
unique().explode() 사용
df2 = df.groupby(['Airline', 'Total_Stops'])['Route'].unique().explode().reset_index()
# 확인용 코드
df2
총 개수를 보면 두개가 같은 값인 것 같다
이것도 뭔 차인지 궁금해짐
필수 4) 조건에 맞는 데이터 추출하기2
조건
pivot_table = df.pivot_table(index = ['Source', 'Destination'], values = 'Airline', aggfunc = 'count').sort_values(by = 'Airline', ascending = False)
# 확인용 코드
pivot_table
filtering = df[(df['Airline'] == 'Air India') & (df['Price'] >= 7000)]
# 확인용 코드
filtering.tail()
도전 1) 조건에 맞는 데이터 추출하기3
힌트를 보고 따라감!
# object > datetime 변환
df['Date_of_Journey'] = pd.to_datetime(df['Date_of_Journey'])
# 확인
df.info()
# 힌트2 참고 / dt.day_name() 사용
# 요일이름으로 컬럼 생성
df['day_name'] = df['Date_of_Journey'].dt.day_name()
# 수요일 평균가격 계산
avg_wed_price = df.loc[df['day_name'] == 'Wednesday'][['Price']].agg('mean')
# 출력
print(avg_wed_price)
도전 2) 조건에 맞는 데이터 추출하기4
이 문제도 힌트 보고 따라갔다!
모르는 부분은 계속 구글링해야 했음..
df['Dep_Time'] = pd.to_datetime(df['Dep_Time'], format= '%H:%M').dt.hour
df.info()
여기서 조금 멘붕이 왔는데..?
to_datetime을 써서 datetime으로 형변환 한 후 dt.hour로 시간만 추출한 것인데
1. Dep_Time은 왜 object일까?
2. Dep_Hour은 왜 int형일까?
Q&A에 물어봐놓긴 했는데 추후 해설때 다시 확인해봐야 할듯!
조건정리
lambda 함수 적용을 어떻게 해야 하나 싶어서 또 구글링
🔗apply 알아보기
🔗value_counts 알아보기
# 카테고리 나누고 lambda 적용
df['DT_category'] = df['Dep_Time'].apply(lambda x: '아침' if 5 <= x < 12
else '낮' if 12 <= x < 18
else '오후' if 18 <= x < 24
else '밤')
# 카테고리별로 카운트
df['DT_category'].value_counts()
SQL - 조건에 맞는 사용자 정보 조회하기
SQL - 특정 옵션이 포함된 자동차 리스트 구하기
Python - 수박수박수박수박수박수?
Python - 내적
코드카타 55-56✅
코드카타 31-32✅
개인과제 1-6✅
라이브세션 5,6회차 복습+정리✅
오늘은 판다스 과제 + 라이브세션 복습했다
어제 너무 늦게 자서 진짜 하루종일 졸리고 정신 붙잡기 너무 힘들었다😅 전처리 시각화 강의도 4주차 들었어야 하는데 미룸
팀원분들이랑 남아서 과제 푼 거 확인하느라 10시에 끝났는데 역시 다른 사람들 풀이 보는 게 큰 도움이 되는 것 같음 rrule 쓰는 방법 알았다
내일은 아침에 실업인정 출석하고 발제도 들어야하고 과제해설도 들어야하고 바쁘다바빠 현대사회 그래서 내일도 강의 들을 수 있을지 모르겠지만 노쉬벨킵고잉..🍀
파이티이잉🍀