[Python] 세션과제

yeji·2024년 10월 29일

Python

목록 보기
13/36

Q1

  • Python 라이브러리를 활용하여, 구글 드라이브의 CSV 파일을 데이터프레임으로 읽어오는 코드를 작성해주세요.
  • 테이블의 행과 열 개수를 확인해주세요.
  • 테이블의 처음 5줄을 확인해주세요.
# 읽어오기
df = pd.read_csv("Desktop/J/Python/세션_전소현 튜터/data/flight_data_homework.csv")

# 행 열 확인
df.shape   # 결과 : 10,683 row x 11 columns

# 처음 5줄
df.head()

Q2

  • 각 컬럼별 결측치 개수를 구해주세요.
  • 결측치가 있는 행을 모두 제거해주세요.
# 결측치 개수 확인
df.isna().sum()

# 결측치 행 제거
df1 = df.dropna()

# 제거 확인
df1.isna().sum()

Q3

  • 데이터프레임의 Destination 컬럼 기준 price의 평균값과 중앙값을 동시에 구해주세요. 단, 값은 모두 소수점 첫번째 자리까지 표현해주세요.
df1.groupby('Destination')['Price'].agg(['mean', 'median']).round(1)
  • 데이터프레임의 Airline, Total_Stops 기준 Route 컬럼을 중복값 없이 추출해주시고, 인덱스를 재정렬해주세요. 이를 df2 라는 dataframe 으로 받아주세요.
df2 = df1.groupby(['Airline', 'Total_Stops'])['Route'].nunique().reset_index()

Q4

  • 피벗테이블을 구현하여 출발지와 도착지를 기준으로 한 Airline을 카운트해주세요. 그리고, 카운트 값을 기준으로 내림차순 정렬해주세요.
pd.pivot_table(df, index=['Source', 'Destination'], values='Airline', aggfunc='count').sort_values(by='Airline', ascending=False)
  • Airline 컬럼이 Air India 이고, Price 컬럼이 7000 이상인 데이터를 필터링 해주세요.
mask = ((df['Airline']=='Air India') & (df['Price']>=7000))
df[mask]

Q5. Date_of_Journey 기준 수요일에 예약된 경우의 평균 가격을 구해주세요.

# 데이트타임으로 변환
df['Date_of_Journey'] = pd.to_datetime(df['Date_of_Journey'])

# 시작과 끝 설정
start_date = df['Date_of_Journey'].min()
end_date = df['Date_of_Journey'].max()

# rrule로 수요일만 담기
wednesdays = list(rrule(WEEKLY, byweekday=WE, dtstart=start_date, until=end_date))

# 수요일의 날짜만 선택해서 price 평균 구하기
wednesdays_average_price = df[df['Date_of_Journey'].isin(wednesdays)]['Price'].mean()

Q6. 출발 시간(Dep_Time) 컬럼을 기준으로 lambda 함수를 활용하여 아침, 오후, 저녁, 밤 비행기로 항공편(Airline)을 분류하고 그 개수를 count 해주세요.
아침: 5시 이상 12시 미만
낮: 12시 이상 18시 미만
오후: 18시 이상 24시 미만
밤: 24시 이상 5시 미만(즉, 위의 세가지가 아닌 경우)

# 데이트타임으로 변환
df['Dep_Time'] = pd.to_datetime(df['Dep_Time'])

# 항공편 분류
df['Time'] = df['Dep_Time'].apply(lambda x: 
                                  '아침' if 5 <= x.hour < 12 else 
                                  '낮' if 12 <= x.hour < 18 else 
                                  '오후' if 18 <= x.hour < 24 else 
                                  '밤')

# 카운트
cnt = df.groupby(['Airline', 'Time']).count()
  • count를 쓰니까 컬럼값이 중복됨
# 중복 없이 나타내기
cnt= df.groupby(['Time'])['Airline'].count().reset_index()
profile
👋🏻

0개의 댓글